Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trial
Daniel Ruggiero
1,224 PointsTypeError: ' in <string> ' requires string as left operant, not None Type
https://teamtreehouse.com/library/python-basics/letter-game-app/letter-game-refinement
Hi, I'm having this error when I do not type a letter. In the last excersise it worked as the return was "That is not a word". Now it returns that plus the error:
Traceback (most recent call last): File "letter_game.py", line 114, in <module> play(done) File"letter_game.py", line 76 in play if guess in secret_word: TypeError: ' in <string> ' requires string as left operant, not None Type
I have the same code as the video so I don't know why I'm getting the Error.
import os
import random
import sys
words=[
'manzana',
'banano',
'pera',
'piña',
'papaya',
'sandia',
'cereza',
'granadilla',
'melon',
'coco',
'fresa',
'uva',
'mora',
'arandano',
'limon',
'naranja',
'mandarina',
'franbuesa'
]
def clear():
if os.name == "nt":
os.system("clear")
else:
os.system('clear')
def draw(bad_guesses, good_guesses, secret_word):
clear()
print('strikes: {}/7'.format(len(bad_guesses)))
print('')
for letter in bad_guesses:
print(letter, end=" ")
print('\n\n')
for letter in secret_word:
if letter in good_guesses:
print(letter, end="")
else:
print('_', end="")
print('')
def get_guess(bad_guesses, good_guesses):
guess =input("Adivina una letra: ").lower()
if len(guess) !=1:
print("Solo puedes adivinar una letra")
elif guess in bad_guesses or guess in good_guesses:
print("ya haz probado con esa letra")
elif not guess.isalpha():
print("Solo puedes adivinar letras")
else:
return guess
def play(done):
clear()
secret_word = random.choice(words)
bad_guesses = []
good_guesses = []
while True:
draw(bad_guesses, good_guesses, secret_word)
guess= get_guess(bad_guesses, good_guesses)
if guess in secret_word:
good_guesses.append(guess)
found = True
for letter in secret_word:
if letter not in good_guesses:
found = False
if found:
print("GANASTE!")
print("La palabra secreta era {}".format(secret_word))
done = True
else:
bad_guesses.append(guess)
if len(bad_guesses) == 7:
draw(bad_guesses, good_guesses, secret_word)
print("PERDISTE!")
print("La palabra secreta era {}".format(secret_word))
done = True
if done:
play_again = input("Quieres jugar de nuevo? y/n ").lower()
if play_again != 'n':
return play(done=False)
else:
sys.exit()
def welcome():
start = input("Oprime enter para empezar o Q para salir ").lower()
if start == "q":
print("Chao!")
sys.exit()
print("Bienvenido a ahorcado!")
done= False
while True:
clear()
welcome()
play(done)
Thanks!
1 Answer
Chris Freeman
Treehouse Moderator 68,468 PointsThe error is raised because get_guess returns None if input value is not a valid guess. There are two paths from here:
- improve
get_guess()to only return a valid guess and loop back toinput()until valid guess is entered. - inside
play(), add loop around the call toget_guess()to check ofguessis valid before continuing.
Good Luck! Post back if you have more questions.