-3
我不明白我做错了什么;我必须做一个hang子手游戏,它必须从输入列表中抽取随机单词。但是,在我的“rand_word”函数中,它说我可以在赋值之前引用它?这怎么可能?UnboundLocalError:分配前引用的局部变量'word_list'
import random
board = [
' +---+ \n | | \n | \n | \n | \n | \n========= \n',
' +---+ \n | | \n 0 | \n | \n | \n | \n========= \n',
' +---+ \n | | \n 0 | \n | | \n | \n | \n========= \n',
' +---+ \n | | \n 0 | \n /| | \n | \n | \n========= \n',
' +---+ \n | | \n 0 | \n /|\\ | \n | \n | \n========= \n',
' +---+ \n | | \n 0 | \n /|\\ | \n/ | \n | \n========= \n',
' +---+ \n | | \n 0 | \n /|\\ | \n/\\ | \n | \n========= \n'
]
class Hangman:
def __init__(self,word):
self.word = word # depends on game mode; will either have user input word or will get word from word list
self.missed_letters = [] # empty list is created to hold missed letters
self.guessed_letters = [] # empty list is created to hold guessed letters
def guess(self,letter):
if letter in self.word and letter not in self.guessed_letters: # if the letter is in the word, but not in the guessed letter list, add it
self.guessed_letters.append(letter)
elif letter not in self.word and letter not in self.missed_letters: # if the letter is not in the word, but also not in the missed letter list, add it
self.missed_letters.append(letter)
else:
return False
return True
def hangman_over(self):
return self.hangman_won() or (len(self.missed_letters) == 6) # checks to see if the game has been won or if there are 6 incorrect guesses
def hangman_won(self): #function to determine if you won
if '_' not in self.hide_word():
return True
return False
def hide_word(self): # keeps word "hide" until you guess correct letters
rtn = ''
for letter in self.word:
if letter not in self.guessed_letters:
rtn += '_'
else:
rtn += letter
return rtn
def print_game_status(self): # this function shows the hangman game board, letters guessed, and letters missed
print(board[len(self.missed_letters)])
print('Word: ' + self.hide_word())
print(' ')
print(' ')
print('Letters Missed: '),
for letter in self.missed_letters: #prints every missed letter
print(letter)
print(' ')
print('Letters Guessed: '),
for letter in self.guessed_letters:
print (letter)
def rand_word(): # chooses random word with '5 or more letters' in word_list
word_list = open(word_list.txt, 'r')
for word in word_list:
return word_list[random.randint(0, len(word_list))]
else:
return False
word_list.close()
def main():
game = Hangman(rand_word())
while not game.hangman_over():
while True:
game.print_game_status()
user_input = input('\nEnter a letter: ')
if len(user_input) >= 2:
print("\nEnter only ONE letter at a time!\n")
try_again = input('Try again: ')
if len(try_again) == 1:
game.guessed.append(try_again)
break
else:
continue
game.print_game_status()
if game.hangman_won():
print('\nCongratulations! You win!')
else:
print('\nYOU LOST, THE GAME IS OVER')
print('The word was ' + game.word)
print('\nGoodbye!\n')
if __name__ == "__main__":
main()