Welcome to the Treehouse Community

The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today.

Python Python Basics (2015) Letter Game App Letter Game Refinement

Marta P.
Marta P.
2,849 Points

Letter 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.
Marta P.
2,849 Points

Here 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
seal-mask
PLUS
.a{fill-rule:evenodd;}techdegree seal-36
Christopher Shaw
Python Web Development Techdegree Graduate 58,236 Points

It 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.
Marta P.
2,849 Points

Thank 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.
Marta P.
2,849 Points

It worked, thanks a lot:)