IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

probleme de variable


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    ingé automaticien
    Inscrit en
    Juillet 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingé automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 37
    Par défaut probleme de variable
    bonjour à tous,
    voila j'ai une variable qui me fait une erreur, je cherche depuis un moment mais je ne comprend pas pourquoi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
     
     
    def alea():
    	import random
    	r = random.randint(1,6)
    	return r
     
    def info(x):
            if x==1 :
                    te="banane"
            if x==2 :
                    te="pomme"
            if x==3 :
                    te="poire"
            if x==4 :
                    te="BAR"
            if x==5 :
                    te="cerise"
            if x==6 :
                    te="ananas"        
            return te
     
    def gain(un,de,tr,gain,somme):
            if un==1 and de==1 and tr==1:
                    mul=2
            elif un==1 and de==1:
                    mul=1.1
            elif un==1 and tr==1:
                    mul=1.1
            elif de==1 and tr==1:
                    mul=1.1
     
            elif un==2 and de==2 and tr==2:
                    mul=3
            elif un==2 and de==2:
                    mul=1.2
            elif un==2 and tr==2:
                    mul=1.2
            elif de==2 and tr==2:
                    mul=1.2
     
            elif un==3 and de==3 and tr==3:
                    mul=4
            elif un==3 and de==3:
                    mul=1.3
            elif un==3 and tr==3:
                    mul=1.3
            elif de==3 and tr==3:
                    mul=1.3
     
            elif un==4 and de==4 and tr==4:
                    mul=5
            elif un==4 and de==4:
                    mul=1.4
            elif un==4 and tr==4:
                    mul=1.4
            elif de==4 and tr==4:
                    mul=1.4
     
            elif un==5 and de==5 and tr==5:
                    mul=6
            elif un==5 and de==5:
                    mul=1.5
            elif un==5 and tr==5:
                    mul=1.5
            elif de==5 and tr==5:
                    mul=1.5
     
            elif un==6 and de==6 and tr==6:
                    mul=7
            elif un==6 and de==6:
                    mul=1.6
            elif un==6 and tr==6:
                    mul=1.6
            elif de==6 and tr==6:
                    mul=1.6           
            else :
                    mul=-1
     
            somme=int(somme+gain*mul)
     
            return somme        
     
    def start_it():
     
            "démarrage de l'animation"
            pari =int(entr1.get())
     
            a=alea()
            b=alea()
            c=alea()
     
            d=info(int(a))
            e=info(int(b))
            f=info(int(c))
     
            txt4.configure(text = d)
            txt5.configure(text = e)
            txt6.configure(text = f)
     
     
            argent = gain(a,b,c,pari,argent)
     
            txt7.configure(text = 'il vous argent '+argent+' euros')
     
     
     
    import os
    from tkinter import *
     
    argent = 100
     
    pari = 0
    e=d=f="vide"
     
    toto = 'il vous argent ',argent,' euros'
    fen1 = Tk()
    # création de widgets 'Label' et 'Entry' :
    txt1 = Label(fen1, text ='bienvenue, vous avez')
    txt2 = Label(fen1, text =argent)
    txt3 = Label(fen1, text ='euro pour jouer')
    txt4 = Label(fen1, text =e)
    txt5 = Label(fen1, text =d)
    txt6 = Label(fen1, text =f)
    txt7 = Label(fen1, text =toto)
    entr1 = Entry(fen1)
     
     
    bou2 = Button(fen1, text='Démarrer', width =8, command=start_it)
    bou2.pack()
     
     
    txt1.grid(row =1, column =1)
    txt2.grid(row =1, column =2)
    txt3.grid(row =1, column =3)
     
    txt4.grid(row =3, column =1)
    txt5.grid(row =3, column =2)
    txt6.grid(row =3, column =3)
     
    txt7.grid(row =4, column =2)
     
    entr1.grid(row =2, column =2)
     
    bou2.grid(row =2, column =3)
    fen1.mainloop()
    bon en résumé c'est un petit jeux à la con qui me permet de faire divers manipulation pour apprendre. il s'agit d'un jeu de machine à sous très simplifié.
    Le programme démarre bien, il me trace bien la fenêtre comme je veux. je rentre une valeur dans la case de saisi, cette valeur correspond à la mise de départ.
    Le programme me récupère bien la valeur, le texte se modifie bien mais à un moment j'ai une erreur qui me sort:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "C:\Python33\lib\tkinter\__init__.py", line 1489, in __call__
        return self.func(*args)
      File "C:/Users/cyril.cagnacci/Desktop/python/code fonctionnelle/jackpot1.py", line 102, in start_it
        argent = gain(a,b,c,pari,argent)
    UnboundLocalError: local variable 'argent' referenced before assignment
    cette erreur viens du sous programme appelé par le bouton et plus particulièrement de l'appel de ma sous fonction de calcul de gain.
    Le résultat ne se copie dans dans la variable argent car il dit que cette variable n'est pas déclaré, sauf que là ou je ne comprend pas c'est que le problème ne viens que de cette variable. Si je modifie mon code de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    def start_it():
     
            "démarrage de l'animation"
            pari =int(entr1.get())
     
            a=alea()
            b=alea()
            c=alea()
     
            d=info(int(a))
            e=info(int(b))
            f=info(int(c))
     
            txt4.configure(text = d)
            txt5.configure(text = e)
            txt6.configure(text = f)
     
     
            argent = gain(a,b,c,pari,argent)
     
            txt7.configure(text = 'il vous argent '+argent+' euros')
    à ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    def start_it():
     
            "démarrage de l'animation"
            pari =int(entr1.get())
     
            a=alea()
            b=alea()
            c=alea()
     
            d=info(int(a))
            e=info(int(b))
            f=info(int(c))
     
            txt4.configure(text = d)
            txt5.configure(text = e)
            txt6.configure(text = f)         
     
            txt7.configure(text = 'il vous argent '+gain(a,b,c,pari,argent)+' euros')
    bein je n'ai pas d'erreur généré et ma variable argent qui est le reste après pari ne se mets jamais à jour.

    j'ai surement fait quelque chose de mal mais je ne vois pas quoi, pouvez vous m'aider svp?
    merci d'avance

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 716
    Par défaut
    Salut,

    Plutôt que de cherchez une aiguille dans une meule de foin, essayez de réduire le code à la plus simple expression du problème.
    Ici on pourrait écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> gv = None
    >>> def foo():
    ...     gv = gv
    ...
    >>> foo()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 2, in foo
    UnboundLocalError: local variable 'gv' referenced before assignment
    >>>
    Vous avez une collision dans les noms parce que gv est déjà "globale" et que vous voulez créer une variable de même nom dans l'espace local de la fonction.

    Pour supprimer l’ambiguïté, utilisez un autre nom ou déclarer gv "global" (si vous voulez modifier ou pas l'assignation globale):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> def foo():
    ...     global gv
    ...     gv = gv
    ...
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    ingé automaticien
    Inscrit en
    Juillet 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingé automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 37
    Par défaut
    super la fonction global ma débloqué merci.
    oui je voulais modifier la valeur d'origine

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme de variable entre SQL et Php
    Par copin dans le forum Langage SQL
    Réponses: 6
    Dernier message: 17/06/2005, 10h58
  2. Réponses: 10
    Dernier message: 03/05/2005, 21h57
  3. [langage] Probleme de variable transfert de contenu
    Par Ludo167 dans le forum Langage
    Réponses: 10
    Dernier message: 08/07/2004, 11h40
  4. [algo]probleme de variables hotes ds un insert
    Par omega dans le forum Langage SQL
    Réponses: 2
    Dernier message: 16/03/2004, 09h03
  5. Réponses: 2
    Dernier message: 04/01/2004, 15h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo