Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
GiuseppeCavallieri committed Dec 20, 2023
0 parents commit 04c575e
Show file tree
Hide file tree
Showing 8 changed files with 236 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Auto detect text files and perform LF normalization
* text=auto
Binary file added Fx-69.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added __pycache__/desarrollo.cpython-310.pyc
Binary file not shown.
Binary file added __pycache__/operaciones.cpython-310.pyc
Binary file not shown.
Binary file added __pycache__/suma.cpython-310.pyc
Binary file not shown.
68 changes: 68 additions & 0 deletions desarrollo.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# IMPORTACION DE FUNCIONES
from operaciones import multiplicacion, sumi, resta, division



# Recibe una expresión y la convierte a una lista trabajable, por el momento no reconoce parentesis
# ni operadores matematicos juntos
def conversion(expresion):
NUMS = "1234567890"
lista_trabajable = []
numero = ""
i = 0
# Recorre la ecuacion
while i < len(expresion):
# Si ve un numero lo agrega a la variable numero
if expresion[i] in NUMS:
numero += expresion[i]
# Si la posición es la última, agrega el número a la lista directamente
if i == len(expresion) - 1:
lista_trabajable.append(int(numero))

# Si ve algo diferente de un numero,
else:
# Agrega el numero a la lista trabajable
lista_trabajable.append(int(numero))
# Agrega la operación que hay entremedio de los números
lista_trabajable.append(expresion[i])
# Reinicia la variable numero
numero = ""
i += 1

return lista_trabajable

# realiza las operaciones correspondientes en la lista trabajable
def operaciones(lista_trabajable):
i = 0
# recorre la lista trabajable
while i < len(lista_trabajable):
# si encuentra el signo *, realiza una multiplicación con los numeros que lo acompañan
if lista_trabajable[i] == "*":
multiplicacion(lista_trabajable, i)
# se debe restar uno al indice, ya que despues el ciclo iterador suma uno, haciendo que de esta forma el indice
# queda en la misma posición, esto funciona ya que las funciones de operación borran los últimos dos elementos
# de la expresión, haciendo que el elemento que sigue a la operación que se realiza quede en la posición del indice
i -= 1
# si encuentra el signo /, realiza una división con los numeros que lo acompañan
elif lista_trabajable[i] == "/":
division(lista_trabajable, i)
i -= 1
i += 1

i = 0
while i < len(lista_trabajable):
# si encuentra el signo +, realiza una suma con los numeros que lo acompañan
if lista_trabajable[i] == "+":
sumi(lista_trabajable, i)
i -= 1
# si encuentra el signo -, realiza resta con los numeros que lo acompañan
elif lista_trabajable[i] == "-":
resta(lista_trabajable, i)
i -= 1
i += 1

return lista_trabajable




28 changes: 28 additions & 0 deletions operaciones.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Operaciones calculadora
'''
cada funcion recibe la lista y la posición del signo, lo que hace es operar los numeros de al lado con el signo
correspondiente, colocando el resultado en la posición izquierda del signo, a continuación elimina los dos elementos
siguientes que serían el signo y el número de la derecha
'''

def sumi(lista_trabajable, i):
lista_trabajable[i-1] = lista_trabajable[i-1] + lista_trabajable[i+1]
lista_trabajable.pop(i)
lista_trabajable.pop(i)

def resta(lista_trabajable, i):
lista_trabajable[i-1] = lista_trabajable[i-1] - lista_trabajable[i+1]
lista_trabajable.pop(i)
lista_trabajable.pop(i)


def multiplicacion(lista_trabajable, i):
lista_trabajable[i-1] = lista_trabajable[i-1] * lista_trabajable[i+1]
lista_trabajable.pop(i)
lista_trabajable.pop(i)


def division(lista_trabajable, i):
lista_trabajable[i-1] = lista_trabajable[i-1] / lista_trabajable[i+1]
lista_trabajable.pop(i)
lista_trabajable.pop(i)
138 changes: 138 additions & 0 deletions principal.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
'''
Resumen Aplicacion: intenta simular una calculadora, recibe una expresion matematica que hasta el momento no puede contener
parentesis y mas de un signo matematico juntos, no esta pensado para recibir espacios o simbolos ajenos a los operadores
matematicos basicos, los cuales son: "+", "-", "x", "/".
Consta de dos partes, la interfaz que va a mostrar las operaciones que se podran realizar y recibir el resultado,
y el codigo el cual resolvera las ecuaciones ingresadas
'''

### BLOQUE DE DEFINICIONES ###

# IMPORTACIÓN DE FUNCIONES
from tkinter import *
import tkinter as tk
from PIL import ImageTk, Image
from operaciones import sumi, multiplicacion, division, resta
from desarrollo import conversion, operaciones

# DEFINICIÓN DE FUNCIONES

# Lee lo que hay en la caja de texto, lo desarrolla y modifica "resultado" con el resultado
def desarrollar_expresion(caja_texto_expresion):
expresion = conversion(caja_texto_expresion.get())
expresion_desarrollada = operaciones(expresion)
resultado["text"] = expresion_desarrollada

# Limpia la caja de texto
def borrar_texto():
caja_texto_expresion.delete(0, END)
resultado["text"] = ""


### BLOQUE PRINCIPAL ###

# ENTRADA

# Variable de la expresion

# Creacion de la ventana y sus caracteristicas
ventana = tk.Tk()
ventana.title("Calculadora pro")
ventana.geometry("283x329")
ventana.resizable(0,0)
ventana.configure(bg="#323030")

# Abre la imagen
foto = Image.open("Fx-69.png")
# Reajusta la imagen
foto_resize = foto.resize((100,100))
# Convierte la imagen con ImageTk
foto_imagen = ImageTk.PhotoImage(foto_resize)
# Crea un label donde se ingresa la imagen
Label_imagen = Label(ventana, image= foto_imagen, bg="#323030")
# Se coloca el label
Label_imagen.place(x=84, y=-25)

# Caja de texto donde se ingresa la expresión
caja_texto_expresion = tk.Entry(ventana)
caja_texto_expresion.place(x=20, y= 86)

# Botones que ingresan el correspondiente simbolo en la caja de texto de la expresion
boton_0 = tk.Button(ventana, height=2, width=6, text="0", fg= "White", bg= "#494848",
command= lambda: caja_texto_expresion.insert("end", "0"))
boton_0.place(x=80, y=269)

boton_1 = tk.Button(ventana, height=2, width=6, text="1", fg= "White", bg= "#494848",
command= lambda: caja_texto_expresion.insert("end", "1"))
boton_1.place(x=20, y=220)

boton_2 = tk.Button(ventana, height=2, width=6, text="2", fg= "White", bg= "#494848",
command= lambda: caja_texto_expresion.insert("end", "2"))
boton_2.place(x=80, y=220)

boton_3 = tk.Button(ventana, height=2, width=6, text="3", fg= "White", bg= "#494848",
command= lambda: caja_texto_expresion.insert("end", "3"))
boton_3.place(x=145, y=220)

boton_4 = tk.Button(ventana, height=2, width=6, text="4", fg= "White", bg= "#494848",
command= lambda: caja_texto_expresion.insert("end", "4"))
boton_4.place(x=20, y=171)

boton_5 = tk.Button(ventana, height=2, width=6, text="5", fg= "White", bg= "#494848",
command= lambda: caja_texto_expresion.insert("end", "5"))
boton_5.place(x=80, y=171)

boton_6 = tk.Button(ventana, height=2, width=6, text="6", fg= "White", bg= "#494848",
command= lambda: caja_texto_expresion.insert("end", "6"))
boton_6.place(x=145, y=171)

boton_7 = tk.Button(ventana, height=2, width=6, text="7", fg= "White", bg= "#494848",
command= lambda: caja_texto_expresion.insert("end", "7"))
boton_7.place(x=20, y=122)

boton_8 = tk.Button(ventana, height=2, width=6, text="8", fg= "White", bg= "#494848",
command= lambda: caja_texto_expresion.insert("end", "8"))
boton_8.place(x=80, y=122)

boton_9 = tk.Button(ventana, height=2, width=6, text="9", fg= "White", bg= "#494848",
command= lambda: caja_texto_expresion.insert("end", "9"))
boton_9.place(x=145, y=122)

boton_suma = tk.Button(ventana, height=2, width=6, text="+", fg= "White", bg= "#494848",
command= lambda: caja_texto_expresion.insert("end", "+"))
boton_suma.place(x=210, y=122)

boton_resta = tk.Button(ventana, height=2, width=6, text="-", fg= "White", bg= "#494848",
command= lambda: caja_texto_expresion.insert("end", "-"))
boton_resta.place(x=210, y=171)

boton_multiplicacion = tk.Button(ventana, height=2, width=6, text="*", fg= "White", bg= "#494848",
command= lambda: caja_texto_expresion.insert("end", "*"))
boton_multiplicacion.place(x=210, y=220)

boton_division = tk.Button(ventana, height=2, width=6, text="/", fg= "White", bg= "#494848",
command= lambda: caja_texto_expresion.insert("end", "/"))
boton_division.place(x=210, y=269)

boton_limpiar = tk.Button(ventana, height=2, width=6, text="limpiar", fg= "White", bg= "#494848",
command= borrar_texto)
boton_limpiar.place(x=20, y=269)

boton_igualdad = tk.Button(ventana, height=2, width=6, text="=", fg= "White", bg= "#494848",
command=lambda: desarrollar_expresion(caja_texto_expresion))
boton_igualdad.place(x=145, y=269)

# resultado es una caja de texto que muestra el desarrollo de la expresion
resultado = Label(text= "", fg="White", bg="#323030")
resultado.place(x=167, y= 85)

expresion_texto = Label(text= "Expresión:", fg= "White", bg="#323030")
expresion_texto.place(x=20, y= 60)

resultado_texto = Label(text= "Resultado:", fg= "White", bg="#323030")
resultado_texto.place(x=167, y= 60)


# mainloop debe estar al final del codigo, hace que la ventana funcione
ventana.mainloop()

0 comments on commit 04c575e

Please sign in to comment.