我为猜词游戏写了一个入门书。猜测之后,是否更新空白(正确或不正确的猜测)。这是代码:
blanks = "*********"
def check(word, guess):
if guess == word:
print("Correct guess: "+guess)
blanks = word
return blanks
else:
input("wrong guess (press any key)")
return blanks
secretword = "Macedonia"
guess = input("type your guess: ")
result = check(secretword, guess)
实施check
并满足else
条件时,不能使用空格。但是可以使用if
条件下的空格。
*当我注释blanks=word
时,代码可以正常工作。
这是为什么?思想全局变量可以在任何地方引用。谢谢
为什么要投票?这个问题很清楚,不能重复,也没有挑衅性。这很有用。
答案 0 :(得分:2)
确实可以在任何地方引用全局变量,但是当您将其分配给函数内部的变量时,除非您另行告诉Python,否则变量是整个函数中的局部变量。因此,函数内部的books
与函数外部的blanks
没有关系。
当代码采用blanks
路径时,它将尝试引用本地else
,但尚未分配任何值,因此您将获得异常blanks
。
要解决此问题,您必须告诉Python函数内部的分配是对全局UnboundLocalError
的分配:
blanks
除非您使用def check(word, guess):
global blanks
... rest of code
或global
语句,否则函数内部任何地方的赋值都会使该变量在函数中的任何地方都是局部的。是否执行分配甚至是否可以执行都不重要:
nonlocal
答案 1 :(得分:-1)
变量blanks
应该在方法check
内定义,以便能够使用它。
def check(word, guess):
blanks = ""
if guess == word:
print("Correct guess: "+guess)
blanks = word
return blanks
else:
input("wrong guess (press any key)")
return blanks
OR
如果您想使用它globally
:
blanks = "*********"
def check(word, guess):
global blanks
if guess == word:
print("Correct guess: "+guess)
blanks = word
return blanks
else:
input("wrong guess (press any key)")
return blanks
secretword = "Macedonia"
guess = input("type your guess: ")
result = check(secretword, guess)