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 :

mon compteur ne marche pas dans ma fonction


Sujet :

Python

  1. #1
    Invité
    Invité(e)
    Par défaut mon compteur ne marche pas dans ma fonction
    Bonjour,

    Je dois faire un projet qui propose 10 calculs à l'utilisateur.
    Mon programme fonctionne sauf qu'il ne s'arrête pas au bout du 10ème calcul.
    Pourriez vous m'expliquer pourquoi ?
    Voici ma fonction pour la partie "addition" :

    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
    nb=0
     
    def addition ():
     
        def question() :
                global resultat
                signe = ("+") 
                chiffre1 = randint(0,99)     
                chiffre2 = randint(0,99)    
                calcul = (chiffre1, signe, chiffre2, ("=")) 
                resultat = chiffre1 + chiffre2 
                resultat = str(resultat) 
                affichageoperation = Label(fenetre, text= calcul) 
                affichageoperation.pack()
                global entree
                value = StringVar()
                value.set("" )
                entree = Entry(fenetre, textvariable=value, width=30)
                entree.pack()
                global nb
                if nb<=3:
                    entree.bind("<Return>", reponse) #On lie la fonction à l'Entry. La fonction sera exécutée à chaque fois que l'utilisateur appuie sur "Entrée"
     
                    nb=nb+1
                else :
                    entree.bind("<Return>", fin)
     
        def fin (self):
                print = Label(fenetre, text = "FIN", bg = "green" )
                print.pack()
     
        def reponse(chiffre):
     
                reponse = str(entree.get()) 
                if reponse == resultat :  
                    print = Label(fenetre, text = "BRAVO", bg = "green" ) 
                    print.pack()
     
                else : #sinon, si la réponse est fausse
                    print = Label(fenetre, text = "MAUVAIS", bg = "red" ) 
                    print.pack()
                question()
     
        fenetre = Tk()
        fenetre.geometry("400x700")
        fenetre.title("ADDITIONS")
        text1= Label(fenetre,text="Quelques additions...")
        text1.pack()
        question ()
    Dernière modification par Bktero ; 02/01/2019 à 14h33. Motif: Balises CODE

  2. #2
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2018
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2018
    Messages : 69
    Points : 72
    Points
    72
    Par défaut
    Bonjour, meilleurs vœux!

    Ou se fait Le contrôle sur le nombre d'opération?

    nb<=3 ?

    si c'est le cas tu vas réaliser que 3 opérations.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci à vous aussi !
    Oui c'est bien ici que ce fait le contrôle, j'avais mis le nombre 3 pour éviter d'avoir 10 calculs à chaque fois que j'essayais mais cela ne change rien la fonction ne s'arrête jamais.

  4. #4
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2018
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2018
    Messages : 69
    Points : 72
    Points
    72
    Par défaut
    Avez vous testé d'afficher la valeur de NB après chaque opération?

    Sinon je crois savoir pourquoi, vous faites une récursivité et la solution d'arrêt n'est pas atteinte parce que vous n'incrémentez pas nb.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if nb<=3:
         entree.bind("<Return>", reponse) 
         #Ici votre fonction lance reponse qui va relancer question le problème est que nb=nb+1 n'est donc pas exécuté
         nb=nb+1
    essayez ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if nb<=3:
         nb=nb+1
         entree.bind("<Return>", reponse)

  5. #5
    Invité
    Invité(e)
    Par défaut
    Merci pour votre réponse,
    j'ai essayé ce que vous m'avez dit mais cela ne marche pas ma fonction de s'arrête toujours pas...
    pourtant lorsque que je demande à afficher nb l'affectation marche bien, j'obtiens 1, 2, 3...
    je ne comprends donc pas pourquoi la fonction ne s'arrête pas.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 435
    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 435
    Points : 37 020
    Points
    37 020
    Par défaut
    Salut,

    Citation Envoyé par arizona22 Voir le message
    lorsque que je demande à afficher nb l'affectation marche bien, j'obtiens 1, 2, 3...
    je ne comprends donc pas pourquoi la fonction ne s'arrête pas.
    Avec votre code, la seule chose que vous pouvez espérer est que s'affiche un Label avec écrit FIN dedans (pourvu que le Return soit attrapé par la dernière Entry créée... car c'est la seule programmée pour créer ce Label).
    Pour ce qui est de "pourquoi la fonction/ou le programme ne s'arrête pas": je vous retourne la question: qu'avez vous fait pour qu'il s'arrête? La condition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
              global nb
                if nb<=3:
                    entree.bind("<Return>", reponse) #On lie la fonction à l'Entry. La fonction sera exécutée à chaque fois que l'utilisateur appuie sur "Entrée"
     
                    nb=nb+1
                else :
                    entree.bind("<Return>", fin)
    ne fait que des .bind et le callback "fin" se résume à:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
          def fin (self):
                print = Label(fenetre, text = "FIN", bg = "green" )
                print.pack()
    i.e afficher un Label (ce qui n'arrête rien).

    - W

Discussions similaires

  1. La sous-fonction ne marche pas dans le programme principal
    Par lematlabeur dans le forum MATLAB
    Réponses: 11
    Dernier message: 15/11/2007, 22h04
  2. mon .exe ne marche pas dans d'autre pc
    Par delhac_86 dans le forum C++Builder
    Réponses: 3
    Dernier message: 03/02/2007, 20h04
  3. [Struts Menu] ne marche pas dans mon application
    Par menzlitsh dans le forum Struts 1
    Réponses: 1
    Dernier message: 29/10/2006, 13h07
  4. Outlook ne marche pas dans mon réseau sous linux
    Par Germain123 dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 25/03/2006, 23h15

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