0

井字游戏问题。

 a=0
 def runx():
    answer = int(input("answer:"))
    if answer == 1:
        if a==1 or a==2:
             print("nope")
        if a==0:
             mlabel=Label(mGui,text="x").grid(row=1,column=1)
             a=1

所以 runx 正在检查你想在板上放置 x 的位置。答案是您想要的变量。“a”是看它是否被占用,它被什么占用。0=无,1=X,2=O。当我运行它时,它说:

“(a) 分配前的参考”。

4

3 回答 3

2

您正在尝试写入全局变量。然后,您应该将单词global a放在函数中。像这样:

 a=0
 def runx():
    global a
    answer = int(input("answer:"))
    if answer == 1:
        if a==1 or a==2:
             print("nope")
        if a==0:
             mlabel=Label(mGui,text="x").grid(row=1,column=1)
             a=1

我要提一下,只要你不声明局部变量a,你总是可以从函数中读取它,但不能写入,除非你输入global关键字。

于 2013-10-30T03:33:13.740 回答
1

对于小型电路板,将状态保持在dict

a = {}
def runx():
    answer = int(input("answer:"))
    row, column = divmod(answer, 3)
    if (row, column) in a:
         print("nope")
    else:
         mlabel=Label(mGui, text="x").grid(row=row, column=column)
         a[row, column] = 1

因为 adict是可变的,所以在函数内更新它没有问题

以下是如何使用 divmod 将 0-8 之间的数字映射到行/列

>>> for answer in range(0, 9):
...     print divmod(answer, 3)
... 
(0, 0)
(0, 1)
(0, 2)
(1, 0)
(1, 1)
(1, 2)
(2, 0)
(2, 1)
(2, 2)
于 2013-10-30T03:40:10.600 回答
0

您在a函数外部进行定义,因此要么global a在函数内部使用来告诉 Python 它是一个全局变量,要么将声明移动到函数内部。

于 2013-10-30T03:34:08.143 回答