Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python UnboundLocalError:局部变量';设置文本';分配前参考_Python - Fatal编程技术网

Python UnboundLocalError:局部变量';设置文本';分配前参考

Python UnboundLocalError:局部变量';设置文本';分配前参考,python,Python,我不熟悉Python和一般的编码,我正在尝试编写一个程序,允许您使用turtle图形进行绘制,以下是我的代码: import turtle # Setup bot = turtle.Turtle() bot.speed(5) bot.color("black") x = 1 color = "black" speed = 5 length = 20 visibility = "true" inputText = '''Choose an option: A) Forward B) Backwa

我不熟悉Python和一般的编码,我正在尝试编写一个程序,允许您使用turtle图形进行绘制,以下是我的代码:

import turtle

# Setup
bot = turtle.Turtle()
bot.speed(5)
bot.color("black")
x = 1
color = "black"
speed = 5
length = 20
visibility = "true"
inputText = '''Choose an option:
A) Forward
B) Backward
C) Left
D) Right
E) Settings
F) Exit
> '''

settingsText = "Choose a setting: \nA) Color: " + str(color) + "\nB) Speed: " + str(speed) + "\nC) Length: " + str(length) + "\nD) Visibility: " + str(visibility) + "\n> "

def main():
    while x == 1:
        mainMenu = input(inputText)
        if mainMenu == "A":
            bot.forward(length)
        elif mainMenu == "B":
            bot.backward(length)
        elif mainMenu == "C":
            bot.left(90)
        elif mainMenu == "D":
            bot.right(90)
        elif mainMenu == "E":
            while x == 1:
                settingsMenu = input(settingsText)
                global settingsText
                if settingsMenu == "A":
                    color = input("What color should the bot write with?")
                    bot.color(color)
                if settingsMenu == "B":
                    speed = input("How fast should the bot move?")
                    bot.speed(speed)
                if settingsMenu == "C":
                    length = input("How far should the bot move each time?")
                if settingsMenu == "D":
                    visibility = input("Should the bot be visible?")
                    if visibility == "true":
                        bot.showturtle()
                    if visibility == "false":
                        bot.hideturtle()
                if settingsMenu == "E":
                    break
                settingsText = "Choose a setting: \nA) Color: " + str(color) + "\nB) Speed: " + str(speed) + "\nC) Length: " + str(length) + "\nD) Visibility: " + str(visibility)
        elif mainMenu == "F":
            break


main()
当我当前运行它时,它显示UnboundLocalError:在赋值之前引用了局部变量“settingsText”。我该如何解决这个问题?我读过其他帖子,上面说如果变量已经被分配到其他地方或其他地方,就不能在局部范围内分配变量(什么是范围??)。但这毫无意义,我在开始时分配变量,然后在if循环结束时给它一个新的赋值,这样下次循环时它会说一些不同的话。任何帮助都将不胜感激


-Hero

在使用变量之前,应调用
全局

global settingsText
settingsMenu = input(settingsText)

同样,您也会遇到类似
长度

等变量的问题。问题似乎出在以下行:

settingsMenu = input(settingsText)
使用后,您正在声明全局设置文本。它将不起作用。您应该在使用全局变量之前声明它们,否则它将被视为局部变量

尝试在函数顶部将所有想要的变量设置为全局变量。这样,您将看到所有这些都在一起


另外,尽量不要使用全局变量。这被认为是不好的做法,在大多数情况下都有简单的解决办法。

在语句
settingsMenu=input(settingsText)
之前提到语句
global settingsText
。这样,解释器就知道它必须在全局范围内使用该解释器。