def __init__(self): self.root = Tk() self.calculadora = Calculadora() self.n1 = StringVar() self.n2 = StringVar() self.resultado = StringVar() self.formulario()
def solve (self): self.entrada_expresion.place_forget () self.label_expresion.place_forget () self.boton_resolver_2.place_forget () expresion = self.entrada_expresion.get () color_azul = '#214E77' color_gris = '#686B6D' fuente_botones = font.Font (family = 'Microsoft YaHei UI Light', size = 12, weight = 'bold') fuente_resultado = font.Font (family = 'Microsoft YaHei UI Light', size = 22, weight = 'bold') posicion_y = 120 posicion_x = 150 lexico = Lexema (expresion) calculadora = Calculadora (lexico) evaluacion = [0,'',''] if (calculadora.E (evaluacion)): resultado = evaluacion [0] self.label_resultado = Label (self.ventana, text = 'Resultado:', font = fuente_resultado, fg = color_gris, bg = 'white') self.label_resultado.place (x = posicion_x, y = posicion_y) self.resultado = Label (self.ventana, text = str (resultado), font = fuente_resultado, fg = color_gris, bg = 'white') self.resultado.place (x = posicion_x + 160, y = posicion_y) else: resultado = 'Error: Expresión incorrecta' self.label_resultado = Label (self.ventana, text = 'Resultado:', font = fuente_resultado, fg = color_gris, bg = 'white') self.resultado = Label (self.ventana, text = str (resultado), font = fuente_resultado, fg = color_gris, bg = 'white') self.resultado.place (x = posicion_x - 80, y = posicion_y) self.boton_menu_principal = Button (self.ventana, text = 'Regresar al menu principal', font = fuente_botones, cursor = 'hand2', fg = color_azul, bg = 'white', bd=0, command = self.regresar_menu_principal) self.boton_menu_principal.place (relx = 0.25, rely = 0.35) self.boton_otra_expresion = Button (self.ventana, text = 'Ingresar otra expresión', font = fuente_botones, cursor = 'hand2', fg = color_azul, bg = 'white', bd=0, command = self.ingresar_otra_expresion) self.boton_otra_expresion.place (relx = 0.27, rely = 0.45)
def test_distanciaMatrizMatrizImposible(self): a = Calculadora() self.assertEqual( a.distanciaMatrizMatriz([[(3.0, 2.0), (2.0, 4.0)]], [[(3.0, 2.0), (2.0, 4.0)], [(1.0, 3.0), (4.0, 5.0)]]), "Imposible")
def test_accionImposible(self): a = Calculadora() self.assertEqual( a.accion([[(1.0, 0.0), (4.0, 2.0)], [(4.0, -1.0), (0.0, 0.0)], [(5.0, 0.0), (2.0, -1.0)]], [(3.0, 2.0), (0.0, 0.0), (5.0, -6.0)]), "Imposible")
def test_productoInternoMatriz(self): a = Calculadora() self.assertEqual( a.productoInternoMatriz([[(1.0, 0.0), (-1.0, 0.0)], [(1.0, 0.0), (1.0, 0.0)]], [[(2.0, 0.0), (1.0, 0.0)], [(1.0, 0.0), (3.0, 0.0)]]), (5.0, 0.0))
def test_sumaMatrices(self): a = Calculadora() self.assertEqual( a.sumaMatrices([[(6.0, -4.0), (6.0, -4.0)], [(7.0, 3.0), (7.0, 3.0)]], [[(4.2, -8.1), (4.2, -8.1)], [(0.0, -3.0), (0.0, -3.0)]]), [[(10.2, -12.1), (10.2, -12.1)], [(7.0, 0.0), (7.0, 0.0)]])
def test_sumaVectores(self): a = Calculadora() self.assertEqual( a.sumaVectores([(6.0, -4.0), (7.0, 3.0), (4.2, -8.1), (0.0, -3.0)], [(16.0, 2.3), (0.0, -7.0), (6.0, 0.0), (0.0, -4.0)]), [(22.0, -1.7000000000000002), (7.0, -4.0), (10.2, -8.1), (0.0, -7.0)])
def test_matrizHermitianImposible(self): a = Calculadora() self.assertEqual( a.matrizHermitian([[(5.0, 0.0), (4.0, 5.0), (6.0, -16.0)], [(4.0, -5.0), (13.0, 0.0), (7.0, 0.0)], [(6.0, 16.0), (7.0, 0.0), (-2.1, 0.0)], [(6.0, 16.0), (7.0, 0.0), (-2.1, 0.0)]]), "Imposible")
def test_accion(self): a = Calculadora() self.assertEqual( a.accion([[(1.0, 0.0), (4.0, 2.0), (0.0, 1.0)], [(4.0, -1.0), (0.0, 0.0), (4.0, 0.0)], [(5.0, 0.0), (2.0, -1.0), (6.0, -4.0)]], [(3.0, 2.0), (0.0, 0.0), (5.0, -6.0)]), [[(9.0, 7.0)], [(34.0, -19.0)], [(21.0, -46.0)]])
def test_matrizAdjunta(self): a = Calculadora() self.assertEqual( a.matrizAdjunta([[(1.0, -2.0), (2.0, 3.0), (4.0, 5.0)], [(3.0, 4.0), (4.0, -5.0), (5.0, 6.0)], [(1.0, -2.0), (2.0, 3.0), (7.0, 8.0)]]), [[(1.0, 2.0), (3.0, -4.0), (1.0, 2.0)], [(2.0, -3.0), (4.0, 5.0), (2.0, -3.0)], [(4.0, -5.0), (5.0, -6.0), (7.0, -8.0)]])
def operar(sc, addr): data1, data2, opcionMenu = sc.recv(1024).split() print "recibido", data1, data2, opcionMenu c = Calculadora(data1, data2, opcionMenu) enviar = c.logaritmacion() sc.send(enviar)
def test_transpuesta(self): a = Calculadora() self.assertEqual( a.transpuesta([[(1.0, -2.0), (2.0, 3.0)], [(3.0, 4.0), (4.0, -5.0)], [(1.0, -2.0), (2.0, 3.0)], [(3.0, 4.0), (4.0, -5.0)]]), [[(1.0, -2.0), (3.0, 4.0), (1.0, -2.0), (3.0, 4.0)], [(2.0, 3.0), (4.0, -5.0), (2.0, 3.0), (4.0, -5.0)]])
def test_inversaMatriz(self): a = Calculadora() self.assertEqual( a.inversaMatriz([[(16.0, 2.3), (16.0, 2.3)], [(0.0, -7.0), (0.0, -7.0)], [(6.0, 0.0), (6.0, 0.0)], [(0.0, -4.0), (0.0, -4.0)]]), [[(-16.0, -2.3), (-16.0, -2.3)], [(0.0, 7.0), (0.0, 7.0)], [(-6.0, 0.0), (-6.0, 0.0)], [(0.0, 4.0), (0.0, 4.0)]])
def test_multiplicacionMatrizMatrizImposible(self): a = Calculadora() self.assertEqual( a.multiplicacionMatrizMatriz( [[(3.0, 2.0), (0.0, 0.0), (5.0, -6.0)], [(1.0, 0.0), (4.0, 2.0), (0.0, 1.0)], [(4.0, -1.0), (0.0, 0.0), (4.0, 0.0)]], [[(5.0, 0.0), (2.0, -1.0), (6.0, -4.0)], [(0.0, 0.0), (4.0, 5.0), (2.0, 0.0)]]), "Imposible")
def operar(sc, addr): data1,data2,opcionMenu = sc.recv(1024).split() print "recibido", data1, data2, opcionMenu c = Calculadora(data1, data2, opcionMenu) enviar = 0 if opcionMenu=="+": enviar= c.suma() elif opcionMenu=="-": enviar= c.resta() elif opcionMenu=="*": enviar= c.multiplicacion() elif opcionMenu=="/": enviar= c.division() elif opcionMenu=="rad": enviar= c.radiacion() elif opcionMenu=="pow": enviar= c.potenciacion() elif opcionMenu=="log": enviar = c.logaritmacion() sc.send(str(enviar))
def test_multiplicacionEscalarMatriz(self): a = Calculadora() self.assertEqual( a.multiplicacionEscalarMatriz([[ (1.0, -2.0), (2.0, 3.0) ], [(3.0, 4.0), (4.0, -5.0)], [(1.0, -2.0), (2.0, 3.0)], [(3.0, 4.0), (4.0, -5.0)]], (4.0, 0.0)), [[(4.0, -8.0), (8.0, 12.0)], [(12.0, 16.0), (16.0, -20.0)], [(4.0, -8.0), (8.0, 12.0)], [(12.0, 16.0), (16.0, -20.0)]])
def handle(self): self.paquete = self.request.recv(1024) print('se recibe: ', self.paquete) rec = self.paquete.split(' ') print(rec) Calc = Calculadora(rec[0], rec[1], rec[2]) self.request.send(Calc.multiplicacion())
def test_multiplicacionMatrizMatriz(self): a = Calculadora() self.assertEqual( a.multiplicacionMatrizMatriz([[ (3.0, 2.0), (0.0, 0.0), (5.0, -6.0) ], [(1.0, 0.0), (4.0, 2.0), (0.0, 1.0)], [(4.0, -1.0), (0.0, 0.0), (4.0, 0.0)]], [[ (5.0, 0.0), (2.0, -1.0), (6.0, -4.0) ], [(0.0, 0.0), (4.0, 5.0), (2.0, 0.0)], [(7.0, -4.0), (2.0, 7.0), (0.0, 0.0)]]), [[(26.0, -52.0), (60.0, 24.0), (26.0, 0.0)], [(9.0, 7.0), (1.0, 29.0), (14.0, 0.0)], [(48.0, -21.0), (15.0, 22.0), (20.0, -22.0)]])
def RequestsHandler(request): if len(request.GET) != 0: return HttpResponse("Get request must be empty.") elif request.method == "POST": if len(request.POST) > 3: return HttpResponse("Extra data!") try: a = request.POST["a"] b = request.POST["b"] operacion = request.POST["op"] except Exception: return HttpResponse("Missing data!") try: a = float(a) b = float(b) operacion = float(operacion) except Exception: return HttpResponse("Everything must be a number") CalculadoraObjeto = Calculadora.Calculadora(operacion, a, b) if CalculadoraObjeto.op == 1.0: return HttpResponse(CalculadoraObjeto.suma()) elif CalculadoraObjeto.op == 2.0: return HttpResponse(CalculadoraObjeto.resta()) elif CalculadoraObjeto.op == 3.0: return HttpResponse(CalculadoraObjeto.multiplicacion()) elif CalculadoraObjeto.op == 4.0: if CalculadoraObjeto.num2 == 0.0: return HttpResponse("Divition by 0 not defined") return HttpResponse(CalculadoraObjeto.division()) else: return HttpResponse("Operation undefined") else: return HttpResponse("Http request method error")
def test_dividir(): return calculadora.dividir(5, 0)
def esnumero(candidato): valido = True for caracter in candidato: if caracter in '0123456789': continue else: valido = False break return valido print("Bienvenido a la calculadora") operacion = input("Indique la operación (+, -, *, /): ") oper1 = input("Indique el primer número: ") oper2 = input("Indique el segundo número: ") if esnumero(oper1) and esnumero(oper2): oper1 = int(oper1) oper2 = int(oper2) if operacion == "+": print(Calculadora.suma(oper1, oper2)) elif operacion == "-": print(Calculadora.resta(oper1, oper2)) elif operacion == "*": print(Calculadora.multiplicacion(oper1, oper2)) elif operacion == "/": print(Calculadora.division(oper1, oper2)) else: print("Error! Eso no es una operación válida!") else: print("Error! Ambos números deben tener formato numérico.")
import Calculadora # No se coloca la extension .py resultado = Calculadora.suma(30, 45) print(resultado) ''' Cuando importamos un modulo, python genera un archivo compilado. Este archivo compilado tiene la extension .pyc Los archivos compilados hacen que el script se vuelva mas rapido. Si el archivo no existe, lo crea. ''' from Calculadora import resta, division # Otra forma de importar resultado = resta(30, 45) print(resultado) ''' Podemos renombrar las funcionalidades a importar. ''' from Calculadora import multiplicacion as mult resultado = mult(30, 45) print(resultado)
# ---------------------------------------- 21 - MÓDULOS ----------------------------------------- # # # Cuando un programa ya cuenta con suficientes líneas de código, es necesario separar # el código en varios segmentos o MÓDULOS, los cuales podran ser utilizados entre # archivos. # ---- Módulos ---------------------------------------------------------------------------------- # # En esta ocación se utilizara el módulo auxiliar Calculadora, el cual debe estar en el # mismo nivel que esta archivo, con la palabra reservada IMPORT se denomida el origen # de las posibles funciones auxiliares que se emplearan import Calculadora resultado = Calculadora.suma(10, 20) print("\n Resultado de la suma: {}".format(resultado)) # Al ejecutar este archivo, se creara un folder con un archivo de formato .pyc, el cual # sera generado por el interprete de python, el cual es un archivo compilado, esto # para reducir el tiempo en ejecución, asi que cada que se cree un módulo, se creara # un archivo compilado # Otra forma de declara un módulo, es por medio de la palabra resrvada FROM, en la cual # se realiza una localizacion más exacata de las funciones a utilizar from Calculadora import resta # De esta manera no es necesario emplear a Calculadora como un objeto, sino que # directamente se llama a la función resultado = resta(100, 30) print("\n Resultado de la resta: {}".format(resultado)) # En caso de querer modificar el nombre de la función importada, es posibles por medio # de la palabra AS, la cual asigna un nuevo nombre a la función
import Calculadora as cl if __name__ == '__main__': while True: try: n1 = input("Introduce el primer valor: ") n2 = input("Introduce el segundo valor: ") break except: print("No es una entrada valida") calcu = cl.Calculadora(n1, n2) while True: while True: try: decision = int( raw_input( "1)Suma\n2)Resta\n3)Multiplicacion\n4)Division\n5)Salir\n-->" )) break except: print("No es una entrada valida") if decision == 1: print(calcu.suma()) elif decision == 2: print(calcu.resta()) elif decision == 3:
from SimpleXMLRPCServer import SimpleXMLRPCServer from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler from Calculadora import * # Restrict to a particular path. class RequestHandler(SimpleXMLRPCRequestHandler): rpc_paths = ('/RPC2', ) if __name__ == "__main__": server = SimpleXMLRPCServer(("localhost", 13000), requestHandler=RequestHandler) server.register_introspection_functions() server.register_instance(Calculadora()) # Run the server's main loop server.serve_forever()
def test_multiplicar(): return calculadora.multiplicar(89,6)
class Practica1: def __init__(self): self.root = Tk() self.calculadora = Calculadora() self.n1 = StringVar() self.n2 = StringVar() self.resultado = StringVar() self.formulario() def sumar(self): self.resultado.set( self.calculadora.operacion(float(self.n1.get()), float(self.n2.get()), "SUMA")) self.borrar() def resta(self): self.resultado.set( self.calculadora.operacion(float(self.n1.get()), float(self.n2.get()), "RESTA")) self.borrar() def multiplica(self): self.resultado.set( self.calculadora.operacion(float(self.n1.get()), float(self.n2.get()), "MULTIPLICA")) self.borrar() def divide(self): self.resultado.set( self.calculadora.operacion(float(self.n1.get()), float(self.n2.get()), "DIVIDE")) self.borrar() def borrar(self): self.n1.set("") self.n2.set("") def formulario(self): # Configuración de la raíz self.root.config(bd=15) Label(self.root, text="Número 1").pack() Entry(self.root, justify="center", textvariable=self.n1).pack() Label(self.root, text="Número 2").pack() Entry(self.root, justify="center", textvariable=self.n2).pack() Label(self.root, text="Resultado").pack() Entry(self.root, justify="center", textvariable=self.resultado, state="disabled").pack() Label(self.root, text="").pack() # Separador Button(self.root, text="+", command=self.sumar).pack(side="left") Button(self.root, text="-", command=self.resta).pack(side="left") Button(self.root, text="*", command=self.multiplica).pack(side="left") Button(self.root, text="/", command=self.divide).pack(side="left") # Finalmente bucle de la aplicación self.root.mainloop()
#Main sirve para trabajar con todas las clases, instanciar los objetos y operar con los metodos #Método para importar todo por el asterisco. from Calculadora import * #Intanciar el objeto y trabajar con el Método constructor calculadora1 = Calculadora(5, 2) #Se puede trabajar con todos los métodos, con uno o con ninguno print(f"La suma es: {calculadora1.sumar()}") print(f"La resta es: {calculadora1.restar()}") print(f"La multiplicación es: {calculadora1.multiplicacion()}") print(f"La división es: {calculadora1.division()}") #En el caso de potencia se puede trabajar con un solo argumento print(f"La potencia es: {calculadora1.potencia()}")
def test_restar(): return calculadora.restar(6,5)
def test_sumar(): return calculadora.sumar(14,7)