Débutant en programmation ici
J'essaye d'extraire une variable d'une boucle for dans une fonction à utiliser dans l'équation "Di =", comme suit:
Di = (de - 2*ep)/1000 NameError: name 'de' is not defined
Ce que j'obtiens est cette erreur:
def fun1():
global de, ep
with open("Di_Tub.csv", "r") as f3:
reader3 = csv.reader(f3, delimiter=';')
i3 = 0
for row3 in reader3:
i3 = i3 + 1
if i3 >= 1:
if row3[0] == DN:
if row3[1] == SCH:
de = float(row3[2])
ep = float(row3[3])
f3.close()
fun1()
Di = (de - 2*ep)/1000
Qu'est-ce que je fais de mal?
3 Réponses :
Vous devez avoir les objets globaux en dehors de la fonction lorsque vous les marquez comme globaux:
de = 0.0
ep = 0.0
def fun1():
global de, ep
with open("Di_Tub.csv", "r") as f3:
reader3 = csv.reader(f3, delimiter=';')
i3 = 0
for row3 in reader3:
i3 = i3 + 1
if i3 >= 1:
if row3[0] == DN:
if row3[1] == SCH:
de = float(row3[2])
ep = float(row3[3])
# f3.close() # you don't need this, "with open" does this for you
fun1()
Di = (de - 2*ep)/1000 # this will now work
@EduardSchachtSasse pas de problème. Je suis content d'avoir pu aider. Si ma réponse vous a aidé, veuillez la marquer comme réponse à votre question.
Désolé, je me suis trompé. Le code a fonctionné sans erreur mais "de" et "ep" étaient égaux à 0 quel que soit le contenu du fichier f3. J'ai essayé les suggestions de l'autre réponse, qui n'ont pas fonctionné aussi bien. Auriez-vous une autre solution?
Vous devez définir les variables en dehors de la fonction. Cela devrait donc être:
global de, ep
def fun1():
with open("Di_Tub.csv", "r") as f3:
reader3 = csv.reader(f3, delimiter=';')
i3 = 0
for row3 in reader3:
i3 = i3 + 1
if i3 >= 1:
if row3[0] == DN:
if row3[1] == SCH:
de = float(row3[2])
ep = float(row3[3])
f3.close()
fun1()
Di = (de - 2*ep)/1000
Je vous recommande d'utiliser une instruction return au lieu de variables globales, mais si vous souhaitez utiliser des variables globales, vous devez les déclarer en dehors de la fonction.
essayez de mettre:
global de = float (row3 [2])etglobal ep = float (row3 [3])Quelques questions sur ce code: pourquoi avez-vous besoin de fun1 ()? La fonction ne renvoie rien et si vous avez besoin de valeur (s) de variable, écrivez une boucle simple sans fonction. En plus de cela: pourquoi avez-vous besoin d'i3? Que sont DN et SCH? Vous n'avez pas besoin de fermer le fichier si vous utilisez le gestionnaire de contexte (avec)
Bonjour Aivar. Comme dit, je suis un débutant en programmation. Ceci est juste une section de tout le code. DN et SCH sont des variables préalablement définies. Parce que j'ai 2 autres boucles for, j'ai décidé de nommer le compteur ici comme i3. À propos de fun1 (), je voulais essayer une nouvelle chose autre que juste écrire la boucle for, qui ne fonctionnait pas.