【问题标题】:Unbound Local Error: referenced before assignment?未绑定的本地错误:在分配之前引用?
【发布时间】:2018-06-08 18:34:35
【问题描述】:
import turtle

ben = turtle.Turtle()
W = 1
ben.speed(10.5)
ben.width(5)
#X = 0
O = 0



if GRIDDONE == True: #inside lines
    ben.speed(10.5)
    ben.forward(100)
    ben.right(90)
    ben.forward(300)
    ben.left(90)
    ben.forward(100)
    ben.left(90)
    ben.forward(300)
    ben.right(90)
    ben.forward(100)
    ben.right(90)
    ben.forward(100)
    ben.right(90)
    ben.forward(300)
    ben.left(90)
    ben.forward(100)
    ben.left(90)
    ben.forward(300)

ben.pu()
ben.forward(500)

X = turtle.Turtle()
O = turtle.Turtle()
X.pu()
O.pu()

X.forward(300)
X.right(90)
O.forward(300)
O.right(90)

X.color("Blue")
X.color()
O.color("Red")
O.color()
X.width(2)
O.width(2)
#X.speed(100)
#O.speed(100)

SQ1 = False


StartX = '300'
StaryY = '0'


def playX():
    P1 = input('Can player X please choose their square')

    if (P1) == ('1'):
        if (SQ1) == False:
            X.right(90)
            X.forward(300) #change this
            X.left(90)
            X.left(45)
            X.pd()
            X.forward(140)
            X.pu()
            X.left(135)
            X.forward(100)
            X.left(135)
            X.pd()
            X.forward(140)
            X.pu()
            X.setx(300)
            X.sety(0)
            X.left(45)
            SQ1 = True




def playO():
    P1 = input('Can player O please choose their square')

    if P1 == ('1'):
        if SQ1 == False:
            O.right(90)
            O.forward(300) #change this
            O.left(90)
            O.forward(50)
            O.left(90)
            O.forward(10)
            O.left(90)
            O.pd()
            O.circle(-40)
            O.pu()
            O.setx(300)
            O.sety(0)
            O.left(180)
            SQ1 = True


playO()
#playX()

这是我的代码,我需要创建一个功能,不允许海龟在同一个“if”函数下绘制两次,但标题中出现错误。错误如下:

Traceback(最近一次调用最后一次): 文件“C:\Users\benna\Downloads\2.py”,第 314 行,在 播放O() 文件“C:\Users\benna\Downloads\2.py”,第 297 行,在 playO 如果 SQ1 == 假: UnboundLocalError:赋值前引用了局部变量“SQ1”

我认为是因为在函数中使用时无法编辑变量。

【问题讨论】:

标签: python-3.x


【解决方案1】:

错误是由于SQ1 在全局空间中声明,然后在您的play0() 函数中被访问。

您可以使用关键字global 修复此错误。在 play0() 函数中添加一行,指定 SQ1 是全局的,如下所示(参见第 2 行):

def playO():
    global SQ1

    P1 = input('Can player O please choose their square')

    if P1 == ('1'):
        if SQ1 == False:

进一步改进:

我建议您在Python Style Guide 后面输入变量名,以帮助提高代码的可读性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 2017-01-21
    • 2016-07-05
    • 2021-05-03
    • 1970-01-01
    相关资源
    最近更新 更多