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 trialnakalkucing
12,964 PointsIn Better with Set(ter) the code Kenneth uses in the video is different from the one he made back in python basics.
When I run my old code from Python Basics it works. But when I run that code with the changes he made in this video I get back a whole lot of errors. As I was watching I noticed that when he began some of the names were different ie. 'good_guesses' became 'correct' and 'bad_guesses' became 'misses'. No big deal until you get an error saying 'correct is not defined'. But I also noticed that some of his coding was different as he scrolled down the page. Unfortunately, without being able to see his whole code I don't know what to change to make my code work. I would really appreciate any help. Thanks :) Here's my code:
import os
import random
import sys
# make a list of words
words = [
'colt',
'filly',
'foal',
'mare',
'horse',
'stallion',
'martingale',
'saddle',
'gelding',
'bale',
'flake',
'bit',
'reins',
]
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')
# draw guessed letters, spaces, and strikes
for letter in secret_word:
if letter in good_guesses:
print (letter, end='')
else:
print ('_', end='')
print('')
def get_guess(guess):
while True:
# take guess
guess = input ("Guess a letter: ").lower()
# print ot win/lose
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 = set()
good_guesses = set()
word_set = set(secret_word)
while True:
draw (bad_guesses, good_guesses, secret_word)
guess = get_guess(bad_guesses | good_guesses)
if guess in word_set:
good_guesses.add(guess)
if not word_set.symmetric_difference(good_guesses):
print("You win!")
print("The secret word was {}.".format(secret_word))
done = True
else:
bad_guesses.add(guess)
if len(bad_guesses) == 7:
draw(bad_guesses, good_guesses, secret_word)
print("You lost! Time next luck better. :)")
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():
print('Welcome to Letter Guess!')
start = input("Press enter/return to start or Q to quit: ").lower()
if start == 'q':
print("Bye!")
sys.exit()
else:
return True
done = False
while True:
clear()
welcome()
play(done)
1 Answer
Steven Parker
231,236 PointsTo be able to access a variable from more than one function, it needs to be declared in the global scope. To do this, you could create them outside of any function, or you could just add this to the beginning of the "play" function:
global bad_guesses, good_guesses
nakalkucing
12,964 PointsThanks! It works without a hitch now. :)
nakalkucing
12,964 Pointsnakalkucing
12,964 PointsHey, Steven Parker. I have had this question up for about 5 days. I still can't figure out what I'm doing wrong. Could you give me a few pointers. Thanks for answering my earlier question, Nakal