2015-05-02 51 views
-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() 

回答

3
word_list = open(word_list.txt, 'r') 

你寫word_list.txt,看起來到Python像你想獲得的word_listtxt屬性。

將文件名放在引號中。

順便說一句,如果你這樣做:

with open('word_list.txt') as word_list: 
    ... 

...那麼該文件將自動在該塊結束時關閉,即使異常。

相關問題