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 :

Problème variable Python


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 14
    Par défaut Problème variable Python
    Bonjour à tous,

    Je suis dans un projet que je dois rendre pour mardi où je fais le jeu du "pierre feuille ciseaux"

    Je suis encore vraiment débutant en Python cependant j'ai réussi à résoudre tous les problèmes jusqu'à maintenant.

    Mais je suis maintenant confronté à deux problèmes :

    Mon jeu marche très bien mais...
    J'ai créé 3 variables pour faire un genre de score (comme ici) :

    Nom : Sans titre-1.jpg
Affichages : 121
Taille : 233,8 Ko

    Sauf que les variables se remettent à 0 après avoir bien fonctionné une fois. J'ai tout essayé mais je n'y arrive pas...

    Deuxième problème, j'aimerais qu'après avoir cliqué sur le bouton "valider", l'ordinateur choisisse de lui-même un autre nombre aléatoire pour la deuxième manche.

    Je vous mets mon programme :

    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
     
     
    def pierrepapierciseaux(): #Fonction main
        for widget in root.winfo_children(): #Retourne la liste de tous les widgets enfants du widget appelant 
        #dans leur ordre de rangement dans la pile: du plus bas au plus haut
            widget.destroy() #On détruit le widget
        global nombre_manche
        global champ_de_saisie
        global resultat
        global manche
        global coup_ordinateur
        global duel
        global score
     
        choix_hasard = random.randint(1,3)  # Tu appelles la fonction random du module random,
        if choix_hasard == 1 :
            coup_ordinateur = "pierre"
            print("Pierre")
        elif choix_hasard == 2 :
            coup_ordinateur = "feuille"  
            print("Feuille")
        else :
            coup_ordinateur = "ciseaux"  
            print("Ciseaux")
     
        bouton_menu = Button(root, text='Menu', command=partial(main), width='8', height='1', foreground="#2113C0", background="#D1D0CC", activeforeground="#2113C0", activebackground="#848489", font=("Comic sans MS",12)) #Bouton valider
        bouton_menu.pack() #On positionne ce widget avec le gestionnaire de position pack (+ marge verticale de 20 pour espacer les différents widgets)
     
        nombre_manche = 0
     
        label = Label(root, text="Pierre papier ciseaux", font=("Comic sans MS", 20), background="#009DE0", foreground="#F8F41F") #Titre du jeu
        label.pack() #On positionne ce widget avec le gestionnaire de position pack
     
        label = Label(root, text="Jouer au mythique jeu du Pierre papier ciseaux contre un ordinateur", font=("Comic sans MS", 15), background="#009DE0") #Indication pour le champ de saisie ci-dessous
        label.pack() #On positionne ce widget avec le gestionnaire de position pack
     
        resultat = Label(root, text='', justify='center', font=("Arial", 15), background="#009DE0") #On affiche le résultat (soit "Le nombre entré est plus petit que le nombre à trouver", soit "Le nombre entré est plus grand que le nombre à trouver", soit "Vous avez gagné"
        resultat.pack() #On positionne ce widget avec le gestionnaire de position pack
     
        label = Label(root, text="Veuillez rentrer soit 'pierre', soit 'feuille' ou soit 'ciseaux' : ", font=("Comic sans MS", 15), background="#009DE0") #Indication pour le champ de saisie ci-dessous
        label.pack() #On positionne ce widget avec le gestionnaire de position pack
     
        champ_de_saisie = Entry(root, justify='center', background="#D1D0CC") #Champ de saisie du nombre
        champ_de_saisie.pack(pady='20') #On positionne ce widget avec le gestionnaire de position pack (+ marge verticale de 20 pour espacer les différents widgets)
     
        duel = Label(root, text='', justify='center', font=("Arial", 15), background="#009DE0") #On affiche le résultat (soit "Le nombre entré est plus petit que le nombre à trouver", soit "Le nombre entré est plus grand que le nombre à trouver", soit "Vous avez gagné"
        duel.pack() #On positionne ce widget avec le gestionnaire de position pack
     
        resultat = Label(root, text="", justify='center', font=("Arial", 15), background="#009DE0") #On affiche le résultat (soit "Le nombre entré est plus petit que le nombre à trouver", soit "Le nombre entré est plus grand que le nombre à trouver", soit "Vous avez gagné"
        resultat.pack() #On positionne ce widget avec le gestionnaire de position pack
     
        bouton_valider = Button(root, text='Valider', command=partial(valider_pierrepapierciseaux), justify='center', width='20', height='1', foreground="#2113C0", background="#D1D0CC", activeforeground="#2113C0", activebackground="#848489", font=("Comic sans MS",15)) #Bouton valider
        bouton_valider.pack(pady='20') #On positionne ce widget avec le gestionnaire de position pack (+ marge verticale de 20 pour espacer les différents widgets)
     
        manche = Label(root, text="", justify='center', font=("Comic sans MS", 15), background="#009DE0") #On affiche le nombre de tentatives
        manche.pack() #On positionne ce widget avec le gestionnaire de position pack
     
        score = Label(root, text="", justify='center', font=("Comic sans MS", 15), background="#009DE0") #On affiche le nombre de tentatives
        score.pack() #On positionne ce widget avec le gestionnaire de position pack
     
        root.mainloop() #Lancement de la boucle principale
     
    def valider_pierrepapierciseaux(): #Fonction valider
        global nombre_manche
    #global est une instruction Python qui l'informe que la variable a qui est utilisée à l'intérieur de la 
    #fonction est la même que celle qui est définie à l'extérieur de la fonction
     
        nombre_manche += 1 #On incrémente de 1 à chaque fois le nombre d'essai
     
        victoire_utilisateur = 0
        victoire_ordinateur = 0
        egalite = 0
     
        if champ_de_saisie.get() == "pierre":
            duel.config(text="Pierre VS "+ coup_ordinateur) #Alors le programme affiche que le nombre est trop petit (par rapport au nombre à trouver)         
        elif champ_de_saisie.get() == "feuille":
            duel.config(text="Feuille VS "+ coup_ordinateur)
        else:
            duel.config(text="Ciseaux VS "+ coup_ordinateur)
     
        if champ_de_saisie.get() == coup_ordinateur :
            resultat.config(text="Egalité", justify='center', borderwidth ="2px", relief=SUNKEN, font=("Arial", 15), background="#BEC6C0",pady='5', padx='5')
            egalite = egalite +1
        elif champ_de_saisie.get() == "feuille" and coup_ordinateur == "pierre":
            resultat.config(text="Victoire", justify='center', borderwidth ="2px", relief=SUNKEN, font=("Arial", 15), background="#26F053",pady='5', padx='5')
            victoire_utilisateur =  victoire_utilisateur +1 
        elif champ_de_saisie.get() == "pierre" and coup_ordinateur == "ciseaux":
            resultat.config(text="Victoire", justify='center', borderwidth ="2px", relief=SUNKEN, font=("Arial", 15), background="#26F053",pady='5', padx='5')
            victoire_utilisateur =  victoire_utilisateur +1 
        elif champ_de_saisie.get() == "ciseaux" and coup_ordinateur == "feuille":
            resultat.config(text="Victoire", justify='center', borderwidth ="2px", relief=SUNKEN, font=("Arial", 15), background="#26F053",pady='5', padx='5')
            victoire_utilisateur =  victoire_utilisateur +1 
        elif champ_de_saisie.get() == "pierre" and coup_ordinateur == "feuille":
            resultat.config(text="Défaite", justify='center', borderwidth ="2px", relief=SUNKEN, font=("Arial", 15), background="#F81F67",pady='5', padx='5')
            victoire_ordinateur = victoire_ordinateur +1
        elif champ_de_saisie.get() == "ciseaux" and coup_ordinateur == "pierre":
            resultat.config(text="Défaite", justify='center', borderwidth ="2px", relief=SUNKEN, font=("Arial", 15), background="#F81F67",pady='5', padx='5')
            victoire_ordinateur = victoire_ordinateur +1
        elif champ_de_saisie.get() == "feuille" and coup_ordinateur == "ciseaux":
            resultat.config(text="Défaite", justify='center', borderwidth ="2px", relief=SUNKEN, font=("Arial", 15), background="#F81F67",pady='5', padx='5')
            victoire_ordinateur = victoire_ordinateur +1
     
        manche.config(text="Nombre de manches : " + str(nombre_manche)) #Nombre de tentatives
     
        score.config(text="Vous : "+str(victoire_utilisateur)+" / Egalité : "+str(egalite)+" / Ordinateur : "+str(victoire_ordinateur)) #Nombre de tentatives

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Bonjour,

    Je vois que vous utilisez les fonctions... Quelle solution choisissez-vous pour faire persister vos données ?

    Il y a pas mal de solutions, mais la plus simple reste à mon avis la sérialisation avec un module comme pickle ou json par exemple.

    Plus qu'à créer votre fonction save_scores, une fois que vous aurez lu la documentation d'un de ces modules.

    N'hésitez pas à présenter vos tests, si des difficultés... bon courage !

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut !

    Utilises la balises [ code] s'il te plaît, ton code est difficilement lisible.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 14
    Par défaut
    C'est fait, désolé

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par LudovicV Voir le message
    C'est fait, désolé
    Merci !
    Voici le correctif, j'ai fais qq changements... (J'ai rajouté des variables globales et j'ai déplacé la partie où tu détermines la variable coup_ordinateur)
    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
    from tkinter import *
    import random
     
    root = Tk()
    root.configure(bg="#009DE0")
     
    def pierrepapierciseaux(): #Fonction main
        for widget in root.winfo_children(): #    
            widget.destroy() #On détruit le widget
        global nombre_manche, victoire_utilisateur, victoire_ordinateur, egalite
        global champ_de_saisie
        global resultat
        global manche
        global duel
        global score
     
        nombre_manche = 0
        victoire_utilisateur = 0
        victoire_ordinateur = 0
        egalite = 0
     
        label = Label(root, text="Pierre papier ciseaux", font=("Comic sans MS", 20), background="#009DE0", foreground="#F8F41F") #Titre du jeu
        label.pack() #On positionne ce widget avec le gestionnaire de position pack
     
        label = Label(root, text="Jouer au mythique jeu du Pierre papier ciseaux contre un ordinateur", font=("Comic sans MS", 15), background="#009DE0") #Indication pour le champ de saisie ci-dessous
        label.pack() #On positionne ce widget avec le gestionnaire de position pack
     
        resultat = Label(root, text='', justify='center', font=("Arial", 15), background="#009DE0") #On affiche le résultat (soit "Le nombre entré est plus petit que le nombre à trouver", soit "Le nombre entré est plus grand que le nombre à trouver", soit "Vous avez gagné"
        resultat.pack() #On positionne ce widget avec le gestionnaire de position pack
     
        label = Label(root, text="Veuillez rentrer soit 'pierre', soit 'feuille' ou soit 'ciseaux' : ", font=("Comic sans MS", 15), background="#009DE0") #Indication pour le champ de saisie ci-dessous
        label.pack() #On positionne ce widget avec le gestionnaire de position pack
     
        champ_de_saisie = Entry(root, justify='center', background="#D1D0CC") #Champ de saisie du nombre
        champ_de_saisie.pack(pady='20') #On positionne ce widget avec le gestionnaire de position pack (+ marge verticale de 20 pour espacer les différents widgets)
     
        duel = Label(root, text='', justify='center', font=("Arial", 15), background="#009DE0") #On affiche le résultat (soit "Le nombre entré est plus petit que le nombre à trouver", soit "Le nombre entré est plus grand que le nombre à trouver", soit "Vous avez gagné"
        duel.pack() #On positionne ce widget avec le gestionnaire de position pack
     
        resultat = Label(root, text="", justify='center', font=("Arial", 15), background="#009DE0") #On affiche le résultat (soit "Le nombre entré est plus petit que le nombre à trouver", soit "Le nombre entré est plus grand que le nombre à trouver", soit "Vous avez gagné"
        resultat.pack() #On positionne ce widget avec le gestionnaire de position pack
     
        bouton_valider = Button(root, text='Valider', command=valider_pierrepapierciseaux, justify='center', width='20', height='1', foreground="#2113C0", background="#D1D0CC", activeforeground="#2113C0", activebackground="#848489", font=("Comic sans MS",15)) #Bouton valider
        bouton_valider.pack(pady='20') #On positionne ce widget avec le gestionnaire de position pack (+ marge verticale de 20 pour espacer les différents widgets)
     
        manche = Label(root, text="", justify='center', font=("Comic sans MS", 15), background="#009DE0") #On affiche le nombre de tentatives
        manche.pack() #On positionne ce widget avec le gestionnaire de position pack
     
        score = Label(root, text="", justify='center', font=("Comic sans MS", 15), background="#009DE0") #On affiche le nombre de tentatives
        score.pack() #On positionne ce widget avec le gestionnaire de position pack
     
     
     
    def valider_pierrepapierciseaux(): #Fonction valider
        global nombre_manche, victoire_utilisateur, egalite, victoire_ordinateur
        #global est une instruction Python qui l'informe que la variable a qui est utilisée à l'intérieur de la
        #fonction est la même que celle qui est définie à l'extérieur de la fonction
     
        nombre_manche += 1 #On incrémente de 1 à chaque fois le nombre d'essai
     
        choix_hasard = random.randint(1,3) # Tu appelles la fonction random du module random,
        if choix_hasard == 1 :
            coup_ordinateur = "pierre"
            print("Pierre")
        elif choix_hasard == 2 :
            coup_ordinateur = "feuille"
            print("Feuille")
        else :
            coup_ordinateur = "ciseaux"
            print("Ciseaux")
     
        if champ_de_saisie.get() == "pierre":
            duel.config(text="Pierre VS "+ coup_ordinateur) #Alors le programme affiche que le nombre est trop petit (par rapport au nombre à trouver)
        elif champ_de_saisie.get() == "feuille":
            duel.config(text="Feuille VS "+ coup_ordinateur)
        else:
            duel.config(text="Ciseaux VS "+ coup_ordinateur)
     
        if champ_de_saisie.get() == coup_ordinateur :
            resultat.config(text="Egalité", justify='center', borderwidth ="2px", relief=SUNKEN, font=("Arial", 15), background="#BEC6C0",pady='5', padx='5')
            egalite = egalite +1
        elif champ_de_saisie.get() == "feuille" and coup_ordinateur == "pierre":
            resultat.config(text="Victoire", justify='center', borderwidth ="2px", relief=SUNKEN, font=("Arial", 15), background="#26F053",pady='5', padx='5')
            victoire_utilisateur = victoire_utilisateur +1
        elif champ_de_saisie.get() == "pierre" and coup_ordinateur == "ciseaux":
            resultat.config(text="Victoire", justify='center', borderwidth ="2px", relief=SUNKEN, font=("Arial", 15), background="#26F053",pady='5', padx='5')
            victoire_utilisateur = victoire_utilisateur +1
        elif champ_de_saisie.get() == "ciseaux" and coup_ordinateur == "feuille":
            resultat.config(text="Victoire", justify='center', borderwidth ="2px", relief=SUNKEN, font=("Arial", 15), background="#26F053",pady='5', padx='5')
            victoire_utilisateur = victoire_utilisateur +1
        elif champ_de_saisie.get() == "pierre" and coup_ordinateur == "feuille":
            resultat.config(text="Défaite", justify='center', borderwidth ="2px", relief=SUNKEN, font=("Arial", 15), background="#F81F67",pady='5', padx='5')
            victoire_ordinateur = victoire_ordinateur +1
        elif champ_de_saisie.get() == "ciseaux" and coup_ordinateur == "pierre":
            resultat.config(text="Défaite", justify='center', borderwidth ="2px", relief=SUNKEN, font=("Arial", 15), background="#F81F67",pady='5', padx='5')
            victoire_ordinateur = victoire_ordinateur +1
        elif champ_de_saisie.get() == "feuille" and coup_ordinateur == "ciseaux":
            resultat.config(text="Défaite", justify='center', borderwidth ="2px", relief=SUNKEN, font=("Arial", 15), background="#F81F67",pady='5', padx='5')
            victoire_ordinateur = victoire_ordinateur +1
     
        manche.config(text="Nombre de manches : " + str(nombre_manche)) #Nombre de tentatives
     
        score.config(text="Vous : "+str(victoire_utilisateur)+" / Egalité : "+str(egalite)+" / Ordinateur : "+str(victoire_ordinateur)) #Nombre de tentatives 
     
    pierrepapierciseaux()
    root.mainloop()

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 14
    Par défaut
    Un grand merci pour votre aide...
    J'ai une petite dernière question.
    Ca serait mieux si il y aura un bouton plutôt que le champ de saisie pour "pierre", "feuille" et "ciseaux".
    J'ai lu sur certains forums que pour savoir si le bouton avait été cliqué il fallait mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    quitter=Button(fenetre, text="Quitter", command=valider)
     
    def valider():
        if quitter.click == False:
            # blablablabliblibli
            quitter.click = True
    Mais quand je fais quitter.click = True, cela ne marche pas.

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

Discussions similaires

  1. Problème variable python : Flask et html input
    Par fullthrottle dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 02/06/2017, 21h31
  2. Problème de prise en compte des variables Python
    Par PythonNovices dans le forum Général Python
    Réponses: 2
    Dernier message: 12/05/2015, 10h31
  3. [javascript] Problème variable globale !!!!
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 08/08/2005, 16h41
  4. [Rave report 5.1.3][delphi 7] Probléme variable PIVar
    Par GILLESKLEIN dans le forum Rave
    Réponses: 2
    Dernier message: 05/02/2005, 15h27
  5. problème variable extern
    Par HeKaz dans le forum C
    Réponses: 14
    Dernier message: 08/01/2003, 01h44

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