每当我开始我的游戏,比如说,我输入1,4作为网格引用,它将用
"UnboundLocalError:赋值前引用的局部变量“
我怎么才能解决这个问题?
代码(为简洁而编辑):
import time
while 1==1:
cont=1
while cont==1:
of="-"
tf="-"
rf="-"
ov="-"
tv="-"
rv="-"
os="-"
ts="-"
rs="-"
go=1
...发布于 2016-02-17 23:16:42
变量of (以及所有其他两个字母的变量)在函数x转向中不可用。
我强烈建议您使用增量编程:编写几行代码,让这些代码正常工作,然后放大程序。这使得您可以很容易地锁定错误。每当我攻击一种新的编程风格时,我都会发现这是非常有用的。看来你对这里使用的一些技术是陌生的。
例如,您在中使用而不是==来进行比较。作为一般原则,这是行不通的。
在主程序之前声明您的函数。在编写这段代码时,每次遍历循环时都要重新定义函数。将函数移到顶部也可以解决许多变量范围的问题。
学习使用布尔值和变量。您的循环应该如下所示:
while True:
cont = True
while cont:通过将变量作为参数传递给函数,可以使变量可用。我可以看到,您对此非常陌生,因为您为这个函数提供了一个参数x,您从未使用过它。
总的来说,您不应该有9个变量:您应该有一个列表,然后将整个列表作为游戏板的当前状态传递。如果你把正方形编号为0-8,你可以很容易地在这方面与董事会一起工作。
要解决眼前的问题,可以将这一行添加到每个例程中:
global of,tf,rf,ov,tv,rv,os,ts,rs这将使变量可用。我看到托马斯已经指出了这一点。
尽管如此,我还是鼓励你更干净地设计它。使用全局变量通常是错误的设计。另外,注意到这个程序需要复制多少代码?应该容易多了。
发布于 2016-02-17 23:21:51
访问一个函数中的变量基本上是可行的,即使该变量仅在外部范围内定义。但是在您的xturn函数中,您有一个分配给of的行。这行在错误发生之前是否已经执行并不重要;它仅仅存在于函数中的任何地方,就会导致Python解释器将其视为局部变量。因此,当在if子句中访问它时,Python尝试访问局部变量of,而现在重要的是直到那个时候才分配这样的局部变量。
发布于 2016-02-17 23:15:35
在您的函数xturn中,您使用了变量of,该变量在该作用域中未声明/已知,因此出现了错误。
如果您查看堆栈跟踪:
Traceback (most recent call last):
File "D:/Projekte/Python/snakes35/blabla.py", line 141, in <module>
ocheck(1)
File "D:/Projekte/Python/snakes35/blabla.py", line 138, in ocheck
xturn(1)
File "D:/Projekte/Python/snakes35/blabla.py", line 33, in xturn
if goo in "1,4" and of not in "o":
UnboundLocalError: local variable 'of' referenced before assignment您可以通过查看文件中的行(错误所在的位置)来确定这一点。
https://stackoverflow.com/questions/35469611
复制相似问题