Soluciones de ejercicios de programación modular con Python

Soluciones de ejercicios de programación modular con Python

Aquí tienes las soluciones de los ejercicios de programación modular que encontrarás en esta página.

  1. 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

  1. 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".
  2. 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
  1. Creo un archivo en la carpeta "calculadora" llamado "calculadora.py".
  2. 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}.")

3 comentarios en «0»

  1. 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.

  2. 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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

curso de Python Entrada anterior Programación modular con Python
curso de Python Entrada siguiente Ejercicios de programación modular con Python