Python si la statement no funciona como se esperaba

Actualmente tengo el código:

fleechance = random.randrange(1,5) print fleechance if fleechance == 1 or 2: print "You failed to run away!" elif fleechance == 4 or 3: print "You got away safely!" 

Fleechance se imprime constantemente como 3 o 4, pero continúo obteniendo el resultado “¡No pudiste huir!” ,¿Puede alguien decirme por qué está pasando esto?

La expresión fleechance == 1 or 2 es equivalente a (fleechance == 1) or (2) . El número 2 siempre se considera “verdadero”.

Prueba esto:

 if fleechance in (1, 2): 

EDITAR: En su situación (solo 2 posibilidades), lo siguiente será aún mejor:

 if fleechance <= 2: print "You failed to run away!" else: print "You got away safely!" 

Tratar

 if fleechance == 1 or fleechance == 2: print "You failed to run away!" elif fleechance == 4 or fleechance == 3: print "You got away safely!" 

Alternativamente, si esas son las únicas posibilidades, puedes hacer

 if fleechance <= 2: print "You failed to run away!" else: print "You got away safely!" 

La instrucción if está funcionando según lo diseñado, el problema es que el orden de las operaciones está haciendo que este código haga algo diferente a lo que usted desea.

La solución más fácil sería decir:

 if fleechance == 1 or fleechance == 2: print "You failed to run away!" elif fleechance == 3 or fleechance == 4: print "You got away safely!" 

Porque no estás preguntando si fleechance es 1 o fleechance es 2; estás preguntando si

  1. fleechance es 1, o
  2. 2 no es cero.

Por supuesto, esa segunda parte de la condición es siempre cierta. Tratar

 if fleechance == 1 or fleechance == 2: ... 

La forma en que escribiste tus declaraciones if es incorrecta. Le dices a python que compruebe si fleechance es igual a 1 es verdadero o si 2 es verdadero. Un entero que no sea cero siempre significa verdadero en una condición. Usted debe escribir:

 fleechance = random.randrange(1,5) print fleechance if fleechance == 1 or fleechance == 2: print "You failed to run away!" elif fleechance == 4 or fleechance == 3: print "You got away safely!"