1

Tengo una duda Estoy haciendo un ejercicio de una calculadora en Python 3.7. Tengo la lógica creada y funciona correctamente la calculadora pero tengo la siguiente duda : ¿Como hago para preguntarle al usuario si quiere realizar otra operación y en el caso de ser SI vuelva a escojer el número de la operación que desea realizar y en caso de ser NO cirre el programa?

Dejo el código que he realizado. Pido disculpas si el código es muy largo pero estoy aprendiendo este lenguaje y la verdad soy nuevo en la programación

Gracias de antemano a las personas que respondan

#Calculadora
print("Bienvenido a la calculadora")
print("Estas son las operaciones que puedes realizar")
print("1 - Suma")
print("2 - Resta")
print("3 - Multiplicación")
print("4 - División")

numero_uno = ()
numero_dos = ()
resultado = ()
operacion = int(input("Introduce el numero de la operación que deseas 
realizar: "))
if operacion == 1:
    try:
    numero_uno = int(input("Ingrese el primer número: "))
    numero_dos = int(input("Ingreso el segundo número: "))
except ValueError:
    print("Ese no es un número")
else:
    resultado = numero_uno + numero_dos
    print("El resultado de la suma es : " + str(resultado))
elif operacion == 2:
try:
    numero_uno = int(input("Ingrese el primer número: "))
    numero_dos = int(input("Ingreso el segundo número: "))
except ValueError:
    print("Ese no es un número")
else:
    resultado = numero_uno - numero_dos
    print("El resultado de la resta es : " + str(resultado))
elif operacion == 3:
    try:
    numero_uno = int(input("Ingrese el primer número: "))
    numero_dos = int(input("Ingreso el segundo número: "))
except ValueError:
    print("Ese no es un número")
else:
    resultado = numero_uno * numero_dos
    print("El resultado de la multiplicacion es : " + str(resultado))
elif operacion == 4:
    try:
    numero_uno = int(input("Ingrese el primer número: "))
    numero_dos = int(input("Ingreso el segundo número: "))
except ValueError:
    print("Ese no es un número")
else:
    resultado = numero_uno / numero_dos
    print("El resultado de la división es : " + str(resultado))
continuar = input("Desea continuar? SI/NO ")
Saelyth
  • 1,305
  • 1
  • 7
  • 13

2 Answers2

1

Yo probaría algo como esto:

def calculadora(operacion):
    numero_uno = ()
    numero_dos = ()
    resultado = ()

    if operacion == 1:
    try:
        numero_uno = int(input("Ingrese el primer número: "))
        numero_dos = int(input("Ingreso el segundo número: "))
    except ValueError:
        print("Ese no es un número")
    else:
        resultado = numero_uno + numero_dos
        print("El resultado de la suma es : " + str(resultado))
    elif operacion == 2:
    try:
        numero_uno = int(input("Ingrese el primer número: "))
        numero_dos = int(input("Ingreso el segundo número: "))
    except ValueError:
        print("Ese no es un número")
    else:
        resultado = numero_uno - numero_dos
        print("El resultado de la resta es : " + str(resultado))
    elif operacion == 3:
        try:
        numero_uno = int(input("Ingrese el primer número: "))
        numero_dos = int(input("Ingreso el segundo número: "))
    except ValueError:
        print("Ese no es un número")
    else:
        resultado = numero_uno * numero_dos
        print("El resultado de la multiplicacion es : " + str(resultado))
    elif operacion == 4:
        try:
        numero_uno = int(input("Ingrese el primer número: "))
        numero_dos = int(input("Ingreso el segundo número: "))
    except ValueError:
        print("Ese no es un número")
    else:
        resultado = numero_uno / numero_dos
        print("El resultado de la división es : " + str(resultado))

if __name__ == '__main__':
    print("Bienvenido a la calculadora")

    while True:
        print("Estas son las operaciones que puedes realizar")
        print("1 - Suma")
        print("2 - Resta")
        print("3 - Multiplicación")
        print("4 - División")

        operacion = int(input("Introduce el numero de la operación que deseas 
        realizar: "))

        calculadora(operacion)

        continuar = input("Desea continuar? SI/NO ")

        if continuar == "NO":
            break

Esta reestructuración aísla la funcionalidad de la calculadora en una función independiente. Para pedir al usuario si quiere volver a empezar se usa un while True, que repetirá todo el proceso hasta que el usuario responda NO.

Si necesitas más información acerca de la condición __name__ == '__main__' la tienes en esta respuesta.

Ale Sanchez
  • 302
  • 1
  • 8
1

He creado una función auxiliar que crea un bucle infinito que te pregunta si quieres continuar o no (esto es lo que pedías, creo), pero aunque la respuesta de Ale es válida, creo que puede mejorarse en muchos aspectos.

Buenos hábitos:
Hay muchísimo código repetido, pero muchísimo. Intenta coger el hábito de no repetir tantas veces la misma linea, especialmente cuando estás aprendiendo a programar. Por norma general, si necesitas repetirla 3 veces o más, es mejor crear una función y llamarla varias veces.
Me he tomado la libertad de re-estructurar tu código mejorando las partes que creía que necesitan ser mejoradas para demostrar esto último.

Lo primero es crear funciones auxiliares para eliminar el uso de repeticiones en el código. Pero en lugar de solo encapsular ese código, he eliminado los try/except porque aunque es común usarlo, puede dar paso a errores inesperados. Como consejo, siempre busca una manera en la que no te haga falta usar try/except. En este caso es tan simple como ver si la string contiene solo dígitos: string.isdigit

Nota importante: He ido añadiendo notas numeradas para que sepas en qué orden exactamente se ejecuta cada parte del código. Cualquier duda coméntame.

# 5 - Funcion que evalua si una string consiste solo en números,
# y sino, entra en bucle hasta que lo sea
def valida_que_sean_numeros(texto):
    numero = input(texto)
    while not numero.isdigit():
        print("Ese no es un número, prueba de nuevo.")
        numero = input(texto)
    return int(numero)

# 8 - Funcion auxiliar que evalua si quieres continuar usando la calculadora o no
def continuar(texto):
    respuesta = input(texto)
    while not respuesta.lower() == "no":
        if respuesta.lower() == "si":
            return True
        else:
            print("Esa no es una opción, prueba de nuevo.")
            respuesta = input(texto)
    return False

# 3 - Funcion principal
def calculadora():
    # 4 - Nos aseguramos de que nuestras 3 variables vayan a ser numeros
    operacion = valida_que_sean_numeros("Introduce el numero de la operación que deseas realizar: ")
    numero_uno = valida_que_sean_numeros("Ingrese el primer número: ")
    numero_dos = valida_que_sean_numeros("Ingrese el segundo número: ")
    # 6 - Seleccionamos la operación adecuada y damos el resultado.
    if operacion == 1:
            resultado = numero_uno + numero_dos
            print("El resultado de la suma es : " + str(resultado))
    elif operacion == 2:
            resultado = numero_uno - numero_dos
            print("El resultado de la resta es : " + str(resultado))
    elif operacion == 3:
            resultado = numero_uno * numero_dos
            print("El resultado de la multiplicacion es : " + str(resultado))
    elif operacion == 4:
            resultado = numero_uno / numero_dos
            print("El resultado de la división es : " + str(resultado))
    # 7 - Usamos la función auxiliar en bucle de Continuar para obtener una respuesta válida
    continuamos = continuar("Desea continuar? SI/NO ")
    if continuamos:
        calculadora() # 9 - Si la respuesta es válida, ejecutamos la funcion calculadora de nuevo,
                      # esto es lo que mantiene el bucle activo de forma infinita hasta que queramos cerrarlo

# 1 - Instrucciones
print("Bienvenido a la calculadora"
      "\nEstas son las operaciones que puedes realizar"
      "\n1 - Suma"
      "\n2 - Resta"
      "\n3 - Multiplicación"
      "\n4 - División")
# 2 - Ejecutamos la calculadora
calculadora()

Curiosidades:
Puedes hacer saltos de linea escribiendo \n, de esta manera no tienes que llamar a la función print 5 veces, basta con llamarla una vez pero con saltos de línea, lo que hará que se ejecute más rápido porque no estamos usando 5 funciones diferentes, solo una.

He dejado a propósito una cosa sin arreglar para que busques la mejor manera de hacerlo: Prueba a colocar un 5 como operación y verás el problema jeje.

Saelyth
  • 1,305
  • 1
  • 7
  • 13