I have here a rather simple rock, paper, scissors program where I am having some trouble with if statements. For some reason, when I enter rock, paper, or scissors (True Values)
Look at this page with Python's operator precedences (the order in which they apply):
https://www.mathcs.emory.edu/~valerie/courses/fall10/155/resources/op_precedence.html
You can see that not in
is listed higher than or
which means that it is evaluated first. Thus you can rewrite your if statement as:
if 'rock' or 'paper' or ('scissors' not in player): ...
Now we see that you really have an or
of three things. The strings are not empty and thus the first 'rock'
already evaluates to true so the the whole thing is always true.
The conditions in if
are wrong.
Consider the if
statement with parentheses:
if ('rock') or ('paper') or ('scissors' not in player):
It will always return True
because rock
will always be true.
You need to swap conditions' operands
if player not in computer:
After this swap, this line becomes irrelevant (and also its conditions are wrong) You need to remove it:
if player == 'rock' or 'paper' or 'scissors':
if player not in {'rock', 'paper', 'scissors'}:
print("That is not how you play rock, paper, scissors!")
...
To breakdown your statement,
if 'rock' or 'paper' or 'scissors' not in player:
Suppose, player = 'scissors'
. This condition would be evaluated as,
('rock'
) or ('paper'
) or ('scissors' not in player
)
which again evaluates to,
True or True or False
Hence evaluating to True
always because string(Eg 'rock') always evaluates to True and ignoring others because of the OR
(Any one True to be True). So whatever you put in player doesn't matter.
CORRECT CONDITION
if player not in ['rock', 'paper', 'scissors']:
This statement checks if player
is not in the given list.