Problème de variable quand j'utilise la fonction def
Multi73
Messages postés
88
Date d'inscription
Statut
Membre
Dernière intervention
-
flopython78 -
flopython78 -
Bonjour,
J'ai créé un jeu pierre, feuille, ciseaux.
Mais le programme m'affiche plein d'erreur, car les variables je ne les ai pas définis dans la même def de mon programme.
Et je ne peux pas mettre les variables
Est-il possible de faire autrement ?
Si oui comment ?
Voici mon programme:
Merci !
J'ai créé un jeu pierre, feuille, ciseaux.
Mais le programme m'affiche plein d'erreur, car les variables je ne les ai pas définis dans la même def de mon programme.
Et je ne peux pas mettre les variables
score_joueuret
score_ordidans la def
q_if2car cela remettrai tout le temps les variables a zéro.
Est-il possible de faire autrement ?
Si oui comment ?
Voici mon programme:
import random import time import os os.system("color c") with open("pierre_feuille_ciseaux.txt", "r+") as file: word_lists = file.readlines() choix_pc = random.choice(word_lists) choix_pc = choix_pc.rstrip() class info(): def q_if1(self): score_joueur = 0 score_ordi = 0 print("Bienvenue dans le jeux pierre feuille ciseaux.") time.sleep(2) def q_if2(self): choix = input("Choisissez entre: pierre, feuille, ou ciseaux") time.sleep(1) print("L'ordinateur à choisi le mots: ", choix_pc) time.sleep(2) if choix_pc == "pierre" and choix == "feuille": score_joueur += 1 print("Vous avez gagner un points en plus.\n Votre score est de", score_joueur, "points. \n Le score de l'ordinateur est de", score_ordi, "points") time.sleep(2) if choix_pc == "pierre" and choix == "ciseaux": score_ordi += 1 print("Vous avez perdu.\n Votre score est de", score_joueur, "points. \n Le score de l'ordinateur est de", score_ordi, "points") time.sleep(2) if choix_pc == "feuille" and choix == "pierre": score_ordi += 1 print("Vous avez perdu.\n Votre score est de", score_joueur, "points. \n Le score de l'ordinateur est de", score_ordi, "points") time.sleep(2) if choix_pc == "feuille" and choix == "ciseaux": score_joueur += 1 print("Vous avez gagner un points en plus.\n Votre score est de", score_joueur, "points. \n Le score de l'ordinateur est de", score_ordi, "points") time.sleep(2) if choix_pc == "ciseaux" and choix == "pierre": score_joueur += 1 print("Vous avez gagner un points en plus.\n Votre score est de", score_joueur, "points. \n Le score de l'ordinateur est de", score_ordi, "points") time.sleep(2) if choix_pc == "ciseaux" and choix == "feuille": score_ordi += 1 print("Vous avez perdu.\n Votre score est de", score_joueur, "points. \n Le score de l'ordinateur est de", score_ordi, "points") time.sleep(2) if choix_pc == choix: print("Votre choix et le choix de l'ordinateur est le même donc je ne mets pas de points !") time.sleep(2) if score_joueur == 5: print("Bravo tu as gagner car ton score est de 5 et le score de l'ordinateur est de:", score_ordi, "bien joué !") time.sleep(6) if score_ordi == 5: print("Tu as perdu car le score de l'ordinateur est de 5 et ton score est de:", score_joueur, "!") q_if1() q_if2() if score_ordi == 5: time.sleep(10) exit() if score_joueur == 5: time.sleep(10) exit()
Merci !
A voir également:
- Problème de variable quand j'utilise la fonction def
- Fonction si et - Guide
- Salut j'utilise whatsapp - Accueil - Messagerie instantanée
- Comment savoir si quelqu'un utilise mon adresse ip - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
7 réponses
Bonjour,
Tu utilises des variables globales. Ou ni classe, ni fonction mais juste une boucle style
Tu utilises des variables globales. Ou ni classe, ni fonction mais juste une boucle style
while score_joueur < 5 and scrore_ordi < 5:
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
est-ce ton premier exercice avec une classe?
les noms que tu utilises (info, q_if1, q_if2) ne signifient rien. c'est peut-être une indication que cela est mal conçu.
est-ce ton premier exercice avec une classe?
les noms que tu utilises (info, q_if1, q_if2) ne signifient rien. c'est peut-être une indication que cela est mal conçu.
Bonjour,
Ca me parait bien long tout ça, on peut faire plus simple:
score_joueur = score_ordi = 0
définir une liste des choix : pierre, feuille, ciseaux
définir une liste des précédences entre objets : [pierre, ciseaux],[ciseaux, feuille],[feuille, pierre]
l'utilisateur entre son choix
l'ordi tire au hasard dans la liste des choix
on met ces 2 choix dans une liste : [utilisateur, ordi]
si choix_1 = choix_2: match nul
si liste = l'une des listes de la liste des précédences, l'utilisateur gagne: score_joueur +=1
si l'inverse de la liste = l'une des listes de la liste des précédences, l'ordi gagne : score_ordi += 1
Ca me parait bien long tout ça, on peut faire plus simple:
score_joueur = score_ordi = 0
définir une liste des choix : pierre, feuille, ciseaux
définir une liste des précédences entre objets : [pierre, ciseaux],[ciseaux, feuille],[feuille, pierre]
l'utilisateur entre son choix
l'ordi tire au hasard dans la liste des choix
on met ces 2 choix dans une liste : [utilisateur, ordi]
si choix_1 = choix_2: match nul
si liste = l'une des listes de la liste des précédences, l'utilisateur gagne: score_joueur +=1
si l'inverse de la liste = l'une des listes de la liste des précédences, l'ordi gagne : score_ordi += 1
Salut Multi73,
Il y a plusieurs problèmes dans ton code. Comme le dit jee pee tu ne boucles pas, donc tu joues une seule fois. yg_be et Phil_1857 en signalent d'autres, mais ton code en l'état ne peut pas fonctionner car tu n'utilises pas correctement la classe que tu définis en faisant plusieurs erreurs empêchant toute exécution.
Si tu crées une classe à partir de la ligne 9
Donc avant les lignes 53 et 54 :
tu peux créer un objet nommé, par exemple,
Ensuite, tu peux utiliser cet objet, et notamment les fonctions (méthodes) qu'il définit :
Au sujet de ta question concernant les variables de score utilisées, tu peux procéder ainsi :
Par exemple, ton code à partie de la ligne 9 pourrait ressembler à cela :
Tu devrais revoir ton cours ou un manuel concernant l'usage des classes, ou un tutoriel simple comme : https://www.w3schools.com/python/python_classes.asp
Dal
Il y a plusieurs problèmes dans ton code. Comme le dit jee pee tu ne boucles pas, donc tu joues une seule fois. yg_be et Phil_1857 en signalent d'autres, mais ton code en l'état ne peut pas fonctionner car tu n'utilises pas correctement la classe que tu définis en faisant plusieurs erreurs empêchant toute exécution.
Si tu crées une classe à partir de la ligne 9
class info():, pour utiliser cette classe, il te faut ensuite créer un objet utilisant cette classe.
Donc avant les lignes 53 et 54 :
q_if1() q_if2()
tu peux créer un objet nommé, par exemple,
jeuutilisant cette classe :
jeu = info()
Ensuite, tu peux utiliser cet objet, et notamment les fonctions (méthodes) qu'il définit :
jeu.q_if1() jeu.q_if2()
Au sujet de ta question concernant les variables de score utilisées, tu peux procéder ainsi :
- définir les variables utilisées par la classe au sein de cette classe, en dehors de toutes méthodes (ou dans la méthode spéciale
__init__()
) - référencer ces variables au sein de tes fonctions avec le mot clef
self
, qui indique que tu accèdes dans ta classe à des variables appartenant à la classe
Par exemple, ton code à partie de la ligne 9 pourrait ressembler à cela :
class info(): score_joueur = 0 score_ordi = 0 def q_if1(self): print("Bienvenue dans le jeux pierre feuille ciseaux.") time.sleep(2) def q_if2(self): choix = input("Choisissez entre: pierre, feuille, ou ciseaux") time.sleep(1) print("L'ordinateur à choisi le mots: ", choix_pc) time.sleep(2) if choix_pc == "pierre" and choix == "feuille": self.score_joueur += 1 print("Vous avez gagner un points en plus.\n Votre score est de", self.score_joueur, "points. \n Le score de l'ordinateur est de", self.score_ordi, "points") time.sleep(2) (...)
Tu devrais revoir ton cours ou un manuel concernant l'usage des classes, ou un tutoriel simple comme : https://www.w3schools.com/python/python_classes.asp
Dal
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Sinon, sans parler de classes, on peut faire simple pour le calcul du gagnant :
Sinon, sans parler de classes, on peut faire simple pour le calcul du gagnant :
import random choix = {'p':'pierre', 'f':'feuille', 'c':'ciseaux'} precedences = ['feuillepierre', 'pierreciseaux', 'ciseauxfeuille'] points_joueur, points_ordi = 0,0 while(True): joueur = input('\nVotre choix (p, f, c) ou <q>uitter : ') if(joueur == 'q'): break joueur = choix[joueur] ordi = random.choice([val for val in choix.values()]) print('joueur : {} ordi : {}'.format(joueur, ordi)) if(joueur == ordi): print('match nul') else: jeu = joueur+ordi jeu_inv = ordi+joueur for p in precedences: if(jeu == p): print('joueur gagne !') points_joueur += 1 elif(jeu_inv == p): print('ordi gagne !') points_ordi += 1 print('\nJoueur : {} points ordi : {} points'.format(points_joueur, points_ordi))