python2.7.6 python中的UnboundLocalError

时间:2014-04-03 00:48:36

标签: python python-2.7

嘿我正在上课的python游戏,我已经发现了这个错误,这个错误已经困扰了我好几天了。我遇到问题的代码部分如下。此外,我无法弄清楚如何使所有的字母留在列表中。我需要修复什么才能以我需要的方式运行?

def update (blanks, letter, word):
if letter in word:
    for i in range (len(blists)):
        if letter == word[i]:
            blists[i] = word[i]
            bstring = ''.join(blists)
return bstring

word = 'tomato'
letter = raw_input ('Please guess a letter. ')

blanks = '_' * len(word)
blists = list(blanks)
bstring = ''.join(blists)
wrong = ''
correct = ''

while True:
    blanks = '_' * len(word)
    blists = list(blanks)
    bstring = ''.join(blists)
    blanks_str = ''.join(blists)
    letter = raw_input ('Please guess a letter. ')
    i = update (blanks, letter, word) 
    print i

编辑: 我得到的错误是UnboundLocalError。当while循环启动更新函数并且bstring是错误时,会发生这种情况。它也没有做我想做的事情。我希望它显示字符串上的单词,无论是正确还是不正确。我希望它类似于http://inventwithpython.com/chapter9.html

的刽子手游戏输出

1 个答案:

答案 0 :(得分:1)

它提供的错误信息是

Traceback (most recent call last):
  File "hangman.py", line 24, in <module>
    i = update (blanks, letter, word) 
  File "hangman.py", line 7, in update
    return bstring
UnboundLocalError: local variable 'bstring' referenced before assignment

注意问题的根源(第7行)并指出“赋值前引用的局部变量'bstring'”

我认为您需要在函数更新中将bstring声明为全局,即将此行添加到

的开头
global bstring

如果我没记错的话,你可以分配它的事实意味着它会将它创建为局部变量,除非你明确地声明它是全局的。当你返回它时,如果你没有分配它,它会看到一个未分配的局部变量,因此就是错误。

至少我认为这是正在发生的事情。当我添加全球声明时,它对我有用。