Repeat if again when validation fails

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 if , it will stop in else , however I would like that when this happens, restart the if again until the user enters a value corresponding to the one I programmed . What can I do to make this happen?

    
asked by anonymous 13.10.2018 / 23:02

3 answers

2

When you want it to repeat something, you must use the while structure. So I 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?')

See running on ideone . Also I put GitHub for future reference .

    
13.10.2018 / 23:18
3

I recommend you read about repetition, for, and while loops. 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?')
    
13.10.2018 / 23:23
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?')

They are:

  • The return of input is always a string , you do not need to str(input()) (Python 3);
  • When you start the program, the user will have to answer "You" without knowing the question, and this does not make sense to those who do not know the program;
  • You can replace a string of "ous" in a condition with the operator in ;
  • Beware of indentation, it completely changes the code if used wrong;
  • 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 this inside a loop, as you requested, 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']
    
    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 at Repl.it

        
    16.10.2018 / 14:45