I am writing a simple program for a homework problem and It seems to be skipping my if statement. I have looked at other questions posed, and the problems there do not seem to be my problem so I am hoping you can help.
def isWordGuessed(secretWord, lettersGuessed):
if lettersGuessed == []:
return False
else:
for i in lettersGuessed:
if i in secretWord == False:
return False
else:
if i == lettersGuessed[-1]:
return True
When I place in some print functions to see what it is doing, it completely skips
if i in secretWord == False:
I have placed right above this line
print i in secretWord
and it will print out the correct Boolean, but even when it prints False, it still skips the if statement. I feel like I must be overlooking something pretty basic, but what it is I can't seem to figure out, so any help would be appreciated. Thanks
Edit:
Here is an example of a call to this function with inputs
isWordGuessed('apple',['a','e','i','k','p','r','s'])
if i in secretWord == False:
This doesn't do what you think it does. If you want this path to be taken when i
isn't in secretWord
, you want
if i not in secretWord:
What you have does a chained comparison. First, it checks
i in secretWord
If that's true, it then checks
secretWord == False
If that's true (which it won't be), it then takes the if
path.
Replace if i in secretWord == False:
with if i not in secretWord
Wouldnt it be the same just doing:
``
def isWordGuessed(secretWord, lettersGuessed):
if not lettersGuessed:
return False
for i in lettersGuessed:
if i not in secretWord:
return False
return True
What your doing is called chained comparisons.
Edit: My bad, too late
BR Daniel
The other answers explain the error in the code well, but you can simplify your code a bit like this:
def isWordGuessed(secretWord, lettersGuessed):
for i in lettersGuessed or ['_']: # uses ['_'] when lettersGuessed = []
if not i in secretWord:
return False
return True
You can do also do this with a generator expression and all()
:
def isWordGuessed(secretWord, lettersGuessed):
return all([i in secretWord for i in lettersGuessed] or [False])