While repetition structure with problems

Asked

Viewed 78 times

0

He asks the first time the desired operation twice after works normal.

print("Calculadora\n")

print("1º Soma")

print("2º Subtração")

print("3º Multiplicação")

print("4º Divisão \n")

resposta = str(input("Qual operação você deseja usar?\n"))

while((resposta !='soma') or (resposta !='subtração') or (resposta !='multiplicação') or (resposta !='divisão')):

    print("Digite uma operação válida")
    resposta = str(input("Qual operação você deseja usar? \n"))

    if resposta == 'soma':
        n1 = int(input("Digite o primeiro valor "))
        n2 = int(input("Digite o segundo valor "))
        resultado = n1+n2
        print("A soma de", n1, "+", n2, "é", resultado)

    elif resposta =='subtração':    
        n1 = int(input("Digite o primeiro valor "))
        n2 = int(input("Digite o segundo valor "))
        resultado = n1-n2
        print("A subtração de", n1, "-", n2, "é", resultado)

    elif resposta =='multiplicação':
        n1 = int(input("Digite o primeiro valor "))
        n2 = int(input("Digite o segundo valor "))
        resultado = n1*n2
        print("A multiplicação de", n1, "*", n2, "é", resultado)

    elif resposta =='divisão':
        n1 = int(input("Digite o primeiro valor "))
        n2 = int(input("Digite o segundo valor "))
        resultado = n1/n2
        print("A divisão de", n1, "/", n2, "é", resultado)
  • Yes, you request the operation outside the repeat loop and again at the very beginning of the loop. It was expected to request twice. In fact, the condition you put on while will always be true, then your program will loop infinitely independent of the value.

2 answers

1

There’s a problem with your code:

((resposta !='soma') or (resposta !='subtração') or
 (resposta !='multiplicação') or (resposta !='divisão'))

The answer can only be one. So whatever the answer, it will always be different from some other answer. This means that your verification will always be true, as only one of the terms will be false and the rest will be true. With this you have an infinite loop.

Another problem: Your while seems to be aiming to verify if the user’s response is valid, however, you put the ifs inside the while. This means they will repeat too, even if the answer is wrong.

There are two ways to fix this second problem:

Removing the ifs from inside the while:

while resposta not in ('soma', 'subtração', 'multiplicação', 'divisão'):
    print("Digite uma operação válida")
    resposta = str(input("Qual operação você deseja usar? \n"))

if resposta == 'soma':
    ... etc ...

The other way is to use your own ifs to verify the validity of the response:

resposta = str(input("Qual operação você deseja usar?\n"))
while resposta != 'sair':

    if resposta == 'soma':
        ....
    elif resposta =='subtração': 
        ....
    elif resposta =='multiplicação':
        ....
    elif resposta =='divisão':
        ....
    else:
        print("Digite uma operação válida")

    resposta = str(input("Qual operação você deseja usar? \n"))

Passing the reading of the answer to the end, the output condition remains the answer 'sair'.

0

Friend just change the position of the following code snippet:

print("Digite uma operação válida")
resposta = str(input("Qual operação você deseja usar? \n"))

Placing the same after the last Elif:

elif resposta =='divisão':
    n1 = int(input("Digite o primeiro valor "))
    n2 = int(input("Digite o segundo valor "))
    resultado = n1/n2
    print("A divisão de", n1, "/", n2, "é", resultado)

print("Digite uma operação válida")
resposta = str(input("Qual operação você deseja usar? \n"))

However your tie is infinite an elegant solution would be as follows:

while(reply != 'Quit'):

Browser other questions tagged

You are not signed in. Login or sign up in order to post.