2 votes

UnboundLocalError : la variable locale 'settingsText' est référencée avant l'affectation

Je suis nouveau à Python et au codage en général, et j'essaie d'écrire un programme qui vous permet de dessiner en utilisant des graphiques de tortue, voici mon code :

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()

Lorsque je l'exécute, le message suivant apparaît : UnboundLocalError : local variable 'settingsText' referenced before assignment. Comment puis-je corriger ce problème ? J'ai lu d'autres messages qui disaient que l'on ne pouvait pas assigner une variable à l'intérieur de la portée locale (qu'est-ce qu'une portée ??) si elle avait déjà été assignée ailleurs ou quelque chose comme ça. Cela n'a aucun sens, j'affecte la variable au début, puis je lui donne une nouvelle affectation à la fin d'une boucle if pour que la prochaine fois que la boucle est jouée, elle dise quelque chose de différent. Toute aide serait appréciée !

-Hero

0voto

Mohsen_Fatemi Points 960

Vous devez appeler global avant d'utiliser la variable :

global settingsText
settingsMenu = input(settingsText)

vous aurez également le même problème avec des variables comme length .

0voto

involtus Points 170

Le problème semble se situer au niveau de la ligne :

settingsMenu = input(settingsText)

Vous déclarez les paramètres globauxText après les avoir utilisés. Vous devez déclarer les variables globales avant de les utiliser, sinon elles seront considérées comme des variables locales.

Essayez de rendre toutes les variables que vous voulez globales au début de la fonction. De cette façon, vous les verrez toutes ensemble.

Essayez également de ne pas utiliser de variables globales. C'est considéré comme une mauvaise pratique et dans la plupart des cas, il existe des solutions de contournement simples.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X