es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Acerca de los bucles do-while

Estoy tratando de hacer una calculadora simple en python. Pero en algún lugar de mi código hay un problema y sé que está en el bucle while. Lo que quiero hacer es, cada vez que el usuario escriba cualquier cosa excepto +,-,*,/ quiero que el programa pregunte automáticamente nuevamente por la operación y comience de nuevo este proceso. El código:

n1 = int(input("Ingrese el primer número: "))
n2 = int(input("Ingrese el segundo número: "))

def add(n1,n2): return n1 + n2
def sub(n1,n2): return n1 - n2
def div(n1,n2): return n1 / n2
def mult(n1,n2): return n1 * n2
def exp(n1,n2): return n1 ** n2

print("Elija la operación (+, -, *, /, ^): ")
operation = input()

while operation != '+' or operation != '-' or operation != '*' or operation != '/' or operation != '^':
    print("Operación inválida, intente nuevamente (+, -, *, /, ^): ")
    break

else:
    if operation == '+':
        print(n1,"+",n2,"=",add(n1,n2))

elif operation == '-':
    print(n1,"-",n2,"=",sub(n1,n2))

elif operation == '*':
    print(n1,"*",n2,"=",mult(n1,n2))

elif operation == '/':
    print(n1,"/",n2,"=",div(n1,n2))

elif operation == "^":
    print(n1,"^",n2,"=",exp(n1,n2))

“`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema en el código radica en el bucle while. La condición en el bucle while es incorrecta – en lugar de verificar si la operación es una de las opciones válidas (+,-,*,/,^), verifica si la operación no es igual a una opción y luego sale del bucle. Esto significa que el bucle solo se ejecutará una vez, sin importar lo que ingrese el usuario, y luego procederá a verificar las opciones válidas.

    Para solucionar esto, necesitamos actualizar la condición en el bucle while para usar el operador lógico “and”. Esto verificará si la operación no es igual a todas las opciones válidas, en lugar de solo una. Además, debemos mover la declaración de entrada para la operación dentro del bucle while, para que el programa le pida al usuario que ingrese nuevamente si la entrada anterior fue inválida.

    El código corregido debería lucir así:

    n1 = int(input("Ingrese el primer número: "))
    n2 = int(input("Ingrese el segundo número: "))
    
    def sumar(n1,n2): return n1 + n2
    def restar(n1,n2): return n1 - n2
    def dividir(n1,n2): return n1 / n2
    def multiplicar(n1,n2): return n1 * n2
    def elevar(n1,n2): return n1 ** n2
    
    operacion = ""
    while operacion != '+' and operacion != '-' and operacion != '*' and operacion != '/' and operacion != '^':
        operacion = input("Elige la operación (+, -, *, /, ^): ")
        if operacion != '+' and operacion != '-' and operacion != '*' and operacion != '/' and operacion != '^':
            print("Operación inválida, inténtalo de nuevo (+, -, *, /, ^): ")
    
    if operacion == '+':
        print(n1,"+",n2,"=",sumar(n1,n2))
    elif operacion == '-':
        print(n1,"-",n2,"=",restar(n1,n2))
    elif operacion == '*':
        print(n1,"*",n2,"=",multiplicar(n1,n2))
    elif operacion == '/':
        print(n1,"/",n2,"=",dividir(n1,n2))
    elif operacion == "^":
        print(n1,"^",n2,"=",elevar(n1,n2))
    

Comments are closed.