Problem with IF conditional structure

2

I'm trying to learn Python (and programming in general). At the moment, I'm studying if and else and conditions and, or and not. I'm training by doing a quiz about star wars, but I'm having a hard time.

Score = 0

Resposta1 = input("No filme Star Wars, Episódio IV, Léia manda uma mensagem de socorro que diz: \n \" Help me ___________, "
         "you're my only hope.\" Para quem Léia estava pedindo ajuda?")

if Resposta1 == "Obi Wan Kenobi" or "Obi-Wan Kenobi" or "Obi Wan" or "obi wan":
    print("Boa, você é mesmo um Jedi!")
    Score = Score + 1
else:
  print("Você tem muito a aprender, jovem Padawn.")

print("Seu score atual é: " + str(Score))

The program knew how to distinguish between a right and wrong answer before adding other wording of Obi Wan with the "and". Now, even wrong answers return a positive response. Where am I going wrong?

    
asked by anonymous 10.12.2018 / 14:40

1 answer

6

How Python works

No Python a string empty in a condition return is false, however a string with some value is returning true, see an example:

Example 1

if "uma string qualquer" :
  print("Tudo ok")
else:
  print("Não deu")

Example 2

Result: All ok

if "" :
  print("Tudo ok")
else:
  print("Não deu")

Result: Did not give

The problem

In your case, it returned false in the first condition Resposta1 == "Obi Wan Kenobi" , but the other strings were returning true, since they were not empty.

It is necessary to compare the variable with all strings

if Resposta1 == "Obi Wan Kenobi" or Resposta1 == "Obi-Wan Kenobi" or Resposta1 == "Obi Wan" or Resposta1 == "obi wan":

That's why I was always returning a positive value, see your edited code:

Score = 0

Resposta1 = input("No filme Star Wars, Episódio IV, Léia manda uma mensagem de socorro que diz: \n \" Help me ___________, "
         "you're my only hope.\" Para quem Léia estava pedindo ajuda?")

if Resposta1 == "Obi Wan Kenobi" or Resposta1 == "Obi-Wan Kenobi" or Resposta1 == "Obi Wan" or Resposta1 == "obi wan":
    print("Boa, você é mesmo um Jedi!")
    Score = Score + 1
else:
  print("Você tem muito a aprender, jovem Padawn.")

print("Seu score atual é: " + str(Score))

Code with improvements

To get easier you can use the "in" example:

if Resposta1 in ["Obi-Wan Kenobi", "Obi Wan", "obi wan"]:

The same example using your code:

Score = 0

Resposta1 = input("""
No filme Star Wars, Episódio IV, Léia manda uma mensagem de socorro que diz:
Help me ___________, you're my only hope.\" Para quem Léia estava pedindo ajuda?
""")

if Resposta1 in ["Obi-Wan Kenobi", "Obi Wan", "obi wan"]:
    print("Boa, você é mesmo um Jedi!")
    Score = Score + 1
else:
  print("Você tem muito a aprender, jovem Padawn.")

print("Seu score atual é: " + str(Score))
  

In this way it checks if the answer is in the array, if yes,   it returns true, I took the hint from fernandosavio and used it   multiline strings for easier reading.

Test here

    
10.12.2018 / 14:46