Repeat if again when validation fails

Asked

Viewed 85 times

2

ConvInicial = str(input('Você: '))

if ConvInicial == 'Não estou passando bem' or ConvInicial == 'Estou com dor' or ConvInicial == 'Preciso de ajuda':
print('O que você está sentindo?')
RespDor = input('Você: ')
if RespDor == 'Estou com dor de cabeça' or RespDor == 'Dor de cabeça' or RespDor == 'Minha cabeça dói':
    Randomizar = ['Neosaldina', 'Dorflex', 'Advil', 'Tylenol', 'Aspirina', 'Naldecon']
    Randomizar = random.choice(Randomizar)
    print('Você pode usar um {} para aliviar sua dor!'.format(Randomizar))
else:
print('Não entendi, poderia ser mais claro?')

When the user enters a value that is not in the if, it will stop at else, but I would like that when it happens, to start again the if until the user enters a value corresponding to what I have programmed. What I can do to make this happen?

3 answers

3


When you want to repeat something you should use the structure of while. Then you could do something like this:

ConvInicial = str(input('Você: '))
if ConvInicial == 'Não estou passando bem' or ConvInicial == 'Estou com dor' or ConvInicial == 'Preciso de ajuda':
    while True:
        print('O que você está sentindo?')
        RespDor = input('Você: ')
        if RespDor == 'Estou com dor de cabeça' or RespDor == 'Dor de cabeça' or RespDor == 'Minha cabeça dói':
            Randomizar = random.choice(['Neosaldina', 'Dorflex', 'Advil', 'Tylenol', 'Aspirina', 'Naldecon'])
            print('Você pode usar um {} para aliviar sua dor!'.format(Randomizar))
            break; #para encerrar o laço de repetição
        else:
            print('Não entendi, poderia ser mais claro?')

Behold working in the ideone. And in the repl it.. Also put on the Github for future reference.

  • Thank you, I had tried but was giving error, I believe that the indentation was wrong

3

I recommend you read about repetition loops, for and while. After that try to read something about functions and recursion. This is one of the bases of programming in many languages, without this content your code will get very limited.

Anyway, here’s an example:

ConvInicial = str(input('Você: '))

if ConvInicial == 'Não estou passando bem' or ConvInicial == 'Estou com dor' or ConvInicial == 'Preciso de ajuda':
    print('O que você está sentindo?')
    while True:
        RespDor = input('Você: ')
        if RespDor == 'Estou com dor de cabeça' or RespDor == 'Dor de cabeça' or RespDor == 'Minha cabeça dói':
            Randomizar = ['Neosaldina', 'Dorflex', 'Advil', 'Tylenol', 'Aspirina', 'Naldecon']
            Randomizar = random.choice(Randomizar)
            print('Você pode usar um {} para aliviar sua dor!'.format(Randomizar))
            break
        else:
            print('Não entendi, poderia ser mais claro?')

1

I have several considerations regarding your code:

ConvInicial = str(input('Você: '))

if ConvInicial == 'Não estou passando bem' or ConvInicial == 'Estou com dor' or ConvInicial == 'Preciso de ajuda':
print('O que você está sentindo?')
RespDor = input('Você: ')
if RespDor == 'Estou com dor de cabeça' or RespDor == 'Dor de cabeça' or RespDor == 'Minha cabeça dói':
    Randomizar = ['Neosaldina', 'Dorflex', 'Advil', 'Tylenol', 'Aspirina', 'Naldecon']
    Randomizar = random.choice(Randomizar)
    print('Você pode usar um {} para aliviar sua dor!'.format(Randomizar))
else:
print('Não entendi, poderia ser mais claro?')

Are they:

  1. The return of input always is a string, you don’t have to do str(input()) (Python 3);
  2. When starting the program, the user will have to answer "You" without knowing the question, and this makes no sense to those who do not know the program;
  3. You can replace a "ous" string in a condition by the operator in;
  4. Beware of indentation, it changes the code completely if used wrong;
  5. From Python 3.6, it is recommended to use f-string for interpolation;

My solution would look like:

from random import choice

sentimentos = ['Não estou passando bem', 'Estou com dor', 'Preciso de ajuda']
sintomas = ['Estou com dor de cabeça', 'Dor de cabeça', 'Minha cabeça dói']
remedios = ['Neosaldina', 'Dorflex', 'Advil', 'Tylenol', 'Aspirina', 'Naldecon']

sentimento = input('Como está se sentindo hoje?')

if sentimento in sentimentos:
    sintoma = input('O que está sentindo?')
    if sintoma in sintomas:
        remedio = choice(remedios)
        print(f'Você pode tomar um {remedio} para aliviar sua dor')
    else:
        print('Desculpe-me, mas não sei o que fazer nesses casos')
else:
    print('Desculpe-me, mas não sei o que fazer nesses casos')

Adding that into a bow, as you requested, would be:

from random import choice

sentimentos = ['Não estou passando bem', 'Estou com dor', 'Preciso de ajuda']
sintomas = ['Estou com dor de cabeça', 'Dor de cabeça', 'Minha cabeça dói']
remedios = ['Neosaldina', 'Dorflex', 'Advil', 'Tylenol', 'Aspirina', 'Naldecon']

while True:    
    sentimento = input('Como está se sentindo hoje?')
    if sentimento in sentimentos:
        while True:
            sintoma = input('O que está sentindo?')
            if sintoma in sintomas:
                remedio = choice(remedios)
                print(f'Você pode tomar um {remedio} para aliviar sua dor')
                break
            else:
                print('Desculpe-me, mas não sei o que fazer nesses casos')
        break
    else:
        print('Desculpe-me, mas não sei o que fazer nesses casos')

See working on Repl.it

Browser other questions tagged

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