繁体   English   中英

当我在 Python3 中运行这段代码时,它给出了这个错误: NameError: name 'x' is not defined。 我该如何纠正?

[英]When I ran this code in Python3 it gives this error: NameError: name 'x' is not defined. How do I correct this?

from tkinter import *

def callback(r,c):
    global player
    if player == ' X ' and states[x][y] == 0 and stop_game==False:
       b[r][c].configure(text= ' X ' , fg= ' blue ' , bg= ' white ' )
       states[r][c] = ' X '
       player = ' O '

    if player == ' O ' and states[r][c] == 0 and stop_game==False:
       b[r][c].configure(text= ' O ' , fg= ' orange ' , bg= ' black ' )
       states[r][c] = ' O '
       player = ' X '

    check_for_winner()

def check_for_winner():
    global stop_game
    for i in range(3):
        if states[i][0]==states[i][1]==states[i][2]!=0:
           b[i][0].configure(bg= ' grey ' )
           b[i][1].configure(bg= ' grey ' )
           b[i][2].configure(bg= ' grey ' )
           stop_game = True

    for i in range(3):
        if states[0][i]==states[1][i]==states[2][i]!=0:
           b[0][i].configure(bg= ' grey ' )
           b[1][i].configure(bg= ' grey ' )
           b[2][i].configure(bg= ' grey ' )
           stop_game = True

    if states[0][0]==states[1][1]==states[2][2]!=0:
       b[0][0].configure(bg= ' grey ' )
       b[1][1].configure(bg= ' grey ' )
       b[2][2].configure(bg= ' grey ' )
       stop_game = True

    if states[2][0]==states[1][1]==states[0][2]!=0:
       b[2][0].configure(bg= ' grey ' )
       b[1][1].configure(bg= ' grey ' )
       b[0][2].configure(bg= ' grey ' )
       stop_game = True

root = Tk()
b = [[0,0,0],
     [0,0,0],
     [0,0,0]]

states = [[0,0,0],
          [0,0,0],
          [0,0,0]]

for i in range(3):
    for j in range(3):
        b[i][j] = Button(font=( ' Verdana ' , 56), width=3, bg= 'yellow' , command = lambda r=i,c=j: callback(r,c))
        b[i][j].grid(row = i, column = j)

player = ' X '
stop_game = False

mainloop()

当我运行代码时,它给出了这个错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.6/tkinter/__init__.py", line 1705, in __call__
    return self.func(*args)
  File "./tic_tac_toe_gui3.py", line 58, in <lambda>
    b[i][j] = Button(font=( ' Verdana ' , 56), width=3, bg= 'yellow' , command =   lambda r=i,c=j: callback(r,c))
  File "./tic_tac_toe_gui3.py", line 7, in callback
    if player == ' X ' and states[k][y] == 0 and stop_game==False:
NameError: name 'x' is not defined

我尝试为xy声明一个值,但是它给出了这个错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.6/tkinter/__init__.py", line 1705, in __call__
    return self.func(*args)
  File "./tic_tac_toe_gui3.py", line 60, in <lambda>
    b[i][j] = Button(font=( ' Verdana ' , 56), width=3, bg= 'yellow' , command =  lambda r=i,c=j: callback(r,c))
  File "./tic_tac_toe_gui3.py", line 10, in callback
    b[r][c].configure(text= ' X ' , fg= ' blue ' , bg= ' white ' )
  File "/usr/lib/python3.6/tkinter/__init__.py", line 1485, in configure
    return self._configure('configure', cnf, kw)
  File "/usr/lib/python3.6/tkinter/__init__.py", line 1476, in _configure
    self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
_tkinter.TclError: unknown color name " blue "

我需要做些什么来更正此代码以使其正常运行并能够运行?

NameError 是由于未声明变量x,y ,然后tkinter.TclError是由于您添加到 colors 的空格,只需删除代码中所有unwanted spaces

from tkinter import *
def callback(r,c):
    global player
    x,y = some_value,some_value
    if player == 'X' and states[x][y] == 0 and stop_game==False:
       b[r][c].configure(text= 'X' , fg= 'blue' , bg= 'white' )
       states[r][c] = ' X '
       player = ' O '

    if player == ' O ' and states[r][c] == 0 and stop_game==False:
       b[r][c].configure(text= 'O' , fg= 'orange' , bg= 'black' )
       states[r][c] = 'O'
       player = 'X'

    check_for_winner()

def check_for_winner():
    global stop_game
    for i in range(3):
        if states[i][0]==states[i][1]==states[i][2]!=0:
           b[i][0].configure(bg= 'grey' )
           b[i][1].configure(bg= 'grey' )
           b[i][2].configure(bg= 'grey' )
           stop_game = True

    for i in range(3):
        if states[0][i]==states[1][i]==states[2][i]!=0:
           b[0][i].configure(bg= 'grey' )
           b[1][i].configure(bg= 'grey' )
           b[2][i].configure(bg= 'grey' )
           stop_game = True

    if states[0][0]==states[1][1]==states[2][2]!=0:
       b[0][0].configure(bg= 'grey' )
       b[1][1].configure(bg= 'grey' )
       b[2][2].configure(bg= 'grey' )
       stop_game = True

    if states[2][0]==states[1][1]==states[0][2]!=0:
       b[2][0].configure(bg= 'grey' )
       b[1][1].configure(bg= 'grey' )
       b[0][2].configure(bg= 'grey' )
       stop_game = True

root = Tk()
b = [[0,0,0],
     [0,0,0],
     [0,0,0]]

states = [[0,0,0],
          [0,0,0],
          [0,0,0]]

for i in range(3):
    for j in range(3):
        b[i][j] = Button(font=( 'Verdana' , 56), width=3, bg= 'yellow' , command = lambda r=i,c=j: callback(r,c))
        b[i][j].grid(row = i, column = j)

player = 'X'
stop_game = False

mainloop()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM