Aquí tienes las soluciones de los ejercicios de programación modular que encontrarás en esta página.
- Esta sería la solución. Primero accedo al módulo tkinter y con un punto, a su submódulo llamado messagebox. Le doy un alias cualquiera para que no sea tan largo y listo.
import tkinter.messagebox as tkmg tkmg.showinfo("www.programacionfacil.org", "Este es un mensaje informativo.")
Solución del proyecto
- Este ejercicio solo te pedía crear una carpeta llamada «calculadora» en la raíz de tu proyecto. Dentro de esta, tenías que crear una sub carpeta llamada «operaciones».
- Creamos los archivos y ponemos sus respectivas funciones dentro de ellos.
suma.py
# Devuelve el resultado de una suma entre dos valores def suma(numero1,numero2): return numero1 + numero2
resta.py
#Devuelve el resultado de una resta entre dos valores def resta(numero1,numero2): return numero1 - numero2
multiplicacion.py
#Devuelve el resultado de una multiplicación entre dos valores def multiplicacion(numero1,numero2): return numero1 * numero2
division.py
#Devuelve el resultado de una división entre dos valores def division(numero1,numero2): return numero1 / numero2
modulo.py
# Devuelve el resto de una división entre dos valores def modulo(numero1,numero2): return numero1 % numero2
exponente.py
#Devuelve el resultado de un cálculo de exponente entre dos valores def exponente(numero1,numero2): return numero1 ** numero2
- Creo un archivo en la carpeta «calculadora» llamado «calculadora.py».
- Las importaciones, las podíamos haber realizado de múltiples formas. Yo lo he hecho así:
import operaciones
En el código de «calculadora.py», tienes que eliminar todas las funciones. Quedando así:
import operaciones # Se da un título a la calculadora. print("--- CALCULADORA MEJORADA DE NUEVO ---") while True: # Se le pide al usuario que elija una opción y se evalúa print("Por favor, elija una opción:") print("1- Suma.") print("2- Resta.") print("3- Multiplicación.") print("4- División.") print("5- Módulo.") print("6- Exponente.") print("7- Salir.") # Se le pide al usuario un número de opción eleccion = int(input("Teclee un número y pulse ENTER:\n")) match eleccion: case 1: print('Ha elegido la opción "suma".') case 2: print('Ha elegido la opción "resta".') case 3: print('Ha elegido la opción "multiplicación".') case 4: print('Ha elegido la opción "división".') case 5: print('Ha elegido la opción "módulo".') case 6: print('Ha elegido la opción "exponente".') case 7: print('Saliendo de la calculadora...') break case _: print('Error, opción inválida. Especifique una opción del 1 al 7.') # Se solicitan los dos números para cualquier operación que elija. numero_1 = float(input("Especifique el primer operando:\n")) numero_2 = float(input("Especifique el segundo operando:\n")) match eleccion: case 1: resultado = round(suma(numero_1, numero_2), 2) print(f"El resultado de sumar {numero_1} + {numero_2} es: {resultado}.") case 2: resultado = round(resta(numero_1, numero_2), 2) print(f"El resultado de restar {numero_1} - {numero_2} es: {resultado}.") case 3: resultado = round(multiplicacion(numero_1, numero_2), 2) print(f"El resultado de multiplicar {numero_1} por {numero_2} es: {resultado}.") case 4: resultado = round(division(numero_1, numero_2), 2) print(f"El resultado de dividir {numero_1} entre {numero_2} es: {resultado}.") case 5: resultado = round(modulo(numero_1, numero_2), 2) print(f"El resto de la división de {numero_1} entre {numero_2} es: {resultado}.") case 6: resultado = round(exponente(numero_1, numero_2), 2) print(f"{numero_1} elevado a {numero_2} es: {resultado}.")
Lo siguiente es ir a la zona de depuración y mirar cuantos problemas hay. Hay que ir solucionando las llamadas a las funciones en el último match.
Los cambios realizados están en las líneas 45, 48, 51, 54, 57 y 60.
import operaciones # Se da un título a la calculadora. print("--- CALCULADORA MEJORADA DE NUEVO ---") while True: # Se le pide al usuario que elija una opción y se evalúa print("Por favor, elija una opción:") print("1- Suma.") print("2- Resta.") print("3- Multiplicación.") print("4- División.") print("5- Módulo.") print("6- Exponente.") print("7- Salir.") # Se le pide al usuario un número de opción eleccion = int(input("Teclee un número y pulse ENTER:\n")) match eleccion: case 1: print('Ha elegido la opción "suma".') case 2: print('Ha elegido la opción "resta".') case 3: print('Ha elegido la opción "multiplicación".') case 4: print('Ha elegido la opción "división".') case 5: print('Ha elegido la opción "módulo".') case 6: print('Ha elegido la opción "exponente".') case 7: print('Saliendo de la calculadora...') break case _: print('Error, opción inválida. Especifique una opción del 1 al 7.') # Se solicitan los dos números para cualquier operación que elija. numero_1 = float(input("Especifique el primer operando:\n")) numero_2 = float(input("Especifique el segundo operando:\n")) match eleccion: case 1: resultado = round(operaciones.suma(numero_1, numero_2), 2) print(f"El resultado de sumar {numero_1} + {numero_2} es: {resultado}.") case 2: resultado = round(operaciones.resta(numero_1, numero_2), 2) print(f"El resultado de restar {numero_1} - {numero_2} es: {resultado}.") case 3: resultado = round(operaciones.multiplicacion(numero_1, numero_2), 2) print(f"El resultado de multiplicar {numero_1} por {numero_2} es: {resultado}.") case 4: resultado = round(operaciones.division(numero_1, numero_2), 2) print(f"El resultado de dividir {numero_1} entre {numero_2} es: {resultado}.") case 5: resultado = round(operaciones.modulo(numero_1, numero_2), 2) print(f"El resto de la división de {numero_1} entre {numero_2} es: {resultado}.") case 6: resultado = round(operaciones.exponente(numero_1, numero_2), 2) print(f"{numero_1} elevado a {numero_2} es: {resultado}.")
También podías utilizar un alias para no escribir «operaciones.función» cada vez:
import operaciones as op # Se da un título a la calculadora. print("--- CALCULADORA MEJORADA DE NUEVO ---") while True: # Se le pide al usuario que elija una opción y se evalúa print("Por favor, elija una opción:") print("1- Suma.") print("2- Resta.") print("3- Multiplicación.") print("4- División.") print("5- Módulo.") print("6- Exponente.") print("7- Salir.") # Se le pide al usuario un número de opción eleccion = int(input("Teclee un número y pulse ENTER:\n")) match eleccion: case 1: print('Ha elegido la opción "suma".') case 2: print('Ha elegido la opción "resta".') case 3: print('Ha elegido la opción "multiplicación".') case 4: print('Ha elegido la opción "división".') case 5: print('Ha elegido la opción "módulo".') case 6: print('Ha elegido la opción "exponente".') case 7: print('Saliendo de la calculadora...') break case _: print('Error, opción inválida. Especifique una opción del 1 al 7.') # Se solicitan los dos números para cualquier operación que elija. numero_1 = float(input("Especifique el primer operando:\n")) numero_2 = float(input("Especifique el segundo operando:\n")) match eleccion: case 1: resultado = round(op.suma(numero_1, numero_2), 2) print(f"El resultado de sumar {numero_1} + {numero_2} es: {resultado}.") case 2: resultado = round(op.resta(numero_1, numero_2), 2) print(f"El resultado de restar {numero_1} - {numero_2} es: {resultado}.") case 3: resultado = round(op.multiplicacion(numero_1, numero_2), 2) print(f"El resultado de multiplicar {numero_1} por {numero_2} es: {resultado}.") case 4: resultado = round(op.division(numero_1, numero_2), 2) print(f"El resultado de dividir {numero_1} entre {numero_2} es: {resultado}.") case 5: resultado = round(op.modulo(numero_1, numero_2), 2) print(f"El resto de la división de {numero_1} entre {numero_2} es: {resultado}.") case 6: resultado = round(op.exponente(numero_1, numero_2), 2) print(f"{numero_1} elevado a {numero_2} es: {resultado}.")
Y si has utilizado el import «all» (*), no habrás necesitado ni siquiera cambiar nada más en el código.
from operaciones import * # Se da un título a la calculadora. print("--- CALCULADORA MEJORADA DE NUEVO ---") while True: # Se le pide al usuario que elija una opción y se evalúa print("Por favor, elija una opción:") print("1- Suma.") print("2- Resta.") print("3- Multiplicación.") print("4- División.") print("5- Módulo.") print("6- Exponente.") print("7- Salir.") # Se le pide al usuario un número de opción eleccion = int(input("Teclee un número y pulse ENTER:\n")) match eleccion: case 1: print('Ha elegido la opción "suma".') case 2: print('Ha elegido la opción "resta".') case 3: print('Ha elegido la opción "multiplicación".') case 4: print('Ha elegido la opción "división".') case 5: print('Ha elegido la opción "módulo".') case 6: print('Ha elegido la opción "exponente".') case 7: print('Saliendo de la calculadora...') break case _: print('Error, opción inválida. Especifique una opción del 1 al 7.') # Se solicitan los dos números para cualquier operación que elija. numero_1 = float(input("Especifique el primer operando:\n")) numero_2 = float(input("Especifique el segundo operando:\n")) match eleccion: case 1: resultado = round(suma(numero_1, numero_2), 2) print(f"El resultado de sumar {numero_1} + {numero_2} es: {resultado}.") case 2: resultado = round(resta(numero_1, numero_2), 2) print(f"El resultado de restar {numero_1} - {numero_2} es: {resultado}.") case 3: resultado = round(multiplicacion(numero_1, numero_2), 2) print(f"El resultado de multiplicar {numero_1} por {numero_2} es: {resultado}.") case 4: resultado = round(division(numero_1, numero_2), 2) print(f"El resultado de dividir {numero_1} entre {numero_2} es: {resultado}.") case 5: resultado = round(modulo(numero_1, numero_2), 2) print(f"El resto de la división de {numero_1} entre {numero_2} es: {resultado}.") case 6: resultado = round(exponente(numero_1, numero_2), 2) print(f"{numero_1} elevado a {numero_2} es: {resultado}.")
Soluciones de ejercicios de programación modular con Python
Lá única solucion que encontre fue dejar todo en el raiz e importar de esta forma
from suma import *
from rresta import *
from multiplicacion import *
from division import *
from exponente import *
from modulo import *
Dentro del directorio operaciones hay que colocar el archivo __init__.py
con la única línea:
from . import suma, resta, multiplicacion, division, modulo, exponente
Y funciona correctamente.
AttributeError: module ‘operaciones’ has no attribute ‘suma’—no he podido encontrar el porque del error–
verifique la sintaxis la compare con la solucion tuya,
pero no encuentro el error.