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
  Ashley Keeling
11,476 Pointsit 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
Treehouse Moderator 68,468 PointsThe 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
11,476 PointsAshley Keeling
11,476 PointsI 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
Treehouse Moderator 68,468 PointsChris Freeman
Treehouse Moderator 68,468 Points():
but the function
drawis defined as:def draw(): # no arguments acceptedThe 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, andRandom_Worddefined within thedrawfunction?Post back if you need more help. Good luck!!!