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

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

Ashley Keeling
Ashley Keeling
11,476 Points

it says done is not defined please help

import random
import os
import sys

Words=["sunny",
       "cold",
       "computer",
       "speaker",
       "mat",
       "apple",
       "figue",
       "magnet",
       "keyboard",

]

def clear():
    if os.name =="nt":
        os.system("cls")
    else:
        os.system("clear")

def gap():
    print("")

def draw():

    clear()


    print("strikes:{}/5".format(len(bad_guess)))


    for letter in bad_guess:
        print(letter,end=" ")
    print("\n\n")


    for letter in Random_Word:
        if letter in good_guess:
            print(letter,end="")
        else:
            print(" _",end="")
    gap()

def get_guess(bad_guess,good_guess):

    while True:

        guess=input("guess a letter ").lower()

        if len(guess) !=1:
            print("you can only ges a single letter")
            continue
        elif guess in bad_guess or guess in good_guess:
            print("you have already used that letter")
            continue
        else:
            return guess

def play(done):
    clear()
    Random_Word=random.choice(Words)
    bad_guess=[]
    good_guess=[]

    while True:
        draw(bad_guess,good_guess,Random_Word)
        guess=get_guess(bad_guess,good_guess)

        if guess in Random_word:
            good_guess.append(guess)
            found=True

            for letter in Random_word:
                if letter not in good_guess:
                    found=False

                if found:
                    print("YOU WIN!! ")
                    print("The word was {} ".format(Random_Word))
                    done= True

        else:
            bad_guess.append(guess)
            if len(bad_guess)==5:
                draw(bad_guess,good_guess,Random_Word)
                print("YOU LOST!! ")
                print("The word was {} ".format(Random_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():
    yes_or_no=input("world you like to play this game('yes' or 'no')")
    if yes_or_no=="yes":
        done=False
    else:
        done=True

print("Welcome to letter guessing game!! ")
while True:
    clear()
    welcome()
    play(done) 

[MOD: added ```python formatting -cf]

1 Answer

Chris Freeman
MOD
Chris Freeman
Treehouse Moderator 68,441 Points

The issue is in the lines:

while True:
    clear()
    welcome()
    play(done) 

The function welcome sets the local variable done but since there is no return statement the default None is returned and the global variable done is not defined.

When the line play(done) is executed, done is still not defined.

Perhaps, you wanted to use the value returned by welcome as the argument to play(). Once solution is to add a return done as the last statement in the welcome() function. Then change the above lines to:

while True:
    clear()
    response = welcome()
    play(response) 

Post back if you need more help. Good luck!!

Ashley Keeling
Ashley Keeling
11,476 Points

I changed the last lines and it says this:

Welcome to letter guessing game!! world you like to play this game('yes' or 'no')yes

Traceback (most recent call last): File "C:/Users/Ashley/personal stuff/python/treehouse/letter game/fgf.py", line 110, in <module> play(response) File "C:/Users/Ashley/personal stuff/python/treehouse/letter game/fgf.py", line 68, in play draw(bad_guess,good_guess,Random_Word) TypeError: draw() takes 0 positional arguments but 3 were given

Chris Freeman
Chris Freeman
Treehouse Moderator 68,441 Points

():

The `draw` function is called using:

```Python
draw(bad_guess,good_guess,Random_Word)

but the function draw is defined as:

def draw():  # no arguments accepted 

The function definition needs parameter defined to accept the arguments passed in by the function calling statement. In other words, how are bad_guess, good_guess , and Random_Word defined within the draw function?

Post back if you need more help. Good luck!!!