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 trialMarta P.
2,849 PointsLetter Game Refinement - final game not working properly
So the game works quite well at the beginning (asking to begin, asking for a letter), but when I type a letter it's just as if it "exit()"ed itself. No Error or anything, it just exits the game and kind of tilts!
I fixed the bugs in my code so far, following the instructions of the shell, but this I don't get. Thank you in advance for your help:)
Marta P.
2,849 PointsHere is my code. Some of it seem not to fit in the normal code display....no idea why! Sorry!
import sys import os import random
# make a list of words
words = ["whatever", "rock", "scissors", "apples", "bananas"]
def clear(): if os.name == "nt": os.system('cls') 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("Guess a letter: ")
if len(guess) != 1:
print("You can only guess a single letter!")
elif guess in bad_guesses or guess in good_guesses:
print("You've already guessed that letter!")
elif not guess.isalpha():
print("You can only guess letters!")
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("You win!")
print("The secret word was {}".format(secret_word))
done = True
else:
bad_guesses.append(guess)
if len(bad_guesses) == 7:
draw(bad_guesses, good_guesses, secret_word)
print("You lost!")
print("The secret word was {}".format(secret_word))
done = True
if done:
play_again = input("Play again? Y/n").lower
if play_again != 'n':
return play(done=False)
else:
sys.exit()
def welcome(): start = input("Press enter/return to start or Q to quit").lower if start == 'q': print("Bye!") sys.exit() else: return True
print("Welcome to Letter Guess!")
done = False
while True: clear() welcome() play(done)
2 Answers
Christopher Shaw
Python Web Development Techdegree Graduate 58,248 PointsIt is a bit hard to tell by the way you pasted your code, but I think your problem is indeting. I think you have:
if done:
play_again = input("Play again? Y/n").lower
if play_again != 'n':
return play(done=False)
else:
sys.exit()
This will exit after every guess, as the else refers to the if done.
Where it should be:
if done:
play_again = input("Play again? Y/n").lower
if play_again != 'n':
return play(done=False)
else:
sys.exit()
Where the else refers to the if play_again....
Marta P.
2,849 PointsThank you! I tried to fix the pasted code but it still would show like this...sorry about that. And thanks a lot for your help! I will try that!
Marta P.
2,849 PointsIt worked, thanks a lot:)
Chris Freeman
Treehouse Moderator 68,454 PointsChris Freeman
Treehouse Moderator 68,454 PointsPlease post your latest code.