Papier cailloux ciseaux python

Fermé
igoolou - Modifié le 4 nov. 2022 à 10:34
 PierrotLeFou - 4 nov. 2022 à 17:04

Bonjour, je ne comprends pas pourquoi mon code ne marche pas.

def coups():
    """
    Fonction qui demande à l'utilisateur de taper 0, 1 ou 2. 
    Dans le cas contraire où l'utilisateur ne respecte pas la consigne, 
    la fonction reformule la demande jusqu'à obtenir 0, 1 ou 2.
    La convention suivante est considérée :
        0 : papier, 1 : ciseaux, 2 : pierre.
    La fonction renvoie l'entier correspondant (de type int).
    """ 
    ppc = "0 1 2"
    papier = 0
    ciseaux = 1
    pierre = 2
    choix1 = int(input("Donnez votre choix, 0 : papier, 1 : ciseaux, 2 : pierre : "))
    
    while not 0 <= choix1 <=2:
        choix1 = int(input("Donnez votre choix, 0 : papier, 1 : ciseaux, 2 : pierre : "))
        
    return choix1

def gagnant(joueur1, joueur2):
    """
    La fonction reçoit les choix des joueurs 1 et 2 et renvoie l'entier 
    correspondant au joueur gagnant. L'entier 1 pour le joueur1 et l'entier 2 
    pour le joueur2.
    En cas d'égalité la fonction renvoie 0.
    """
    if joueur1 == papier and joueur2 == pierre:
        compteur1=compteur1 + 1
        return 1
    if joueur1 == pierre and joueur2 == ciseaux:
        compteur1=compteur1 + 1
        return 1
    if joueur1 == ciseaux and joueur2 == papier:
        compteur1 = compteur1 + 1
        return 1
    if joueur1 == joueur2:
        return 0
    else:
        compteur2 = compteur2 + 1
        return 2
        
def jeu(n):
    """
    Fonction qui lance le jeu entre deux joueurs et qui affiche tous les résultats. Le premier qui obtient n points a gagné. 
    """
    coups()
    compteur1 = 0
    compteur2 = 0
    if compteur1 == n:
        print("Joueur 1 a gagné !" )
    if compteur2 == n:
        print("Joueur 2 a gagné !" )
    
    while compteur1 or compteur2 != n:
        joueur1 = coups()
        joueur2 = coups()
        return gagnant(joueur1, joueur2)


Windows / Chrome 106.0.0.0

A voir également:

4 réponses

yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 Ambassadeur 1 551
Modifié le 1 nov. 2022 à 15:34

Merci de suivre ceci quand tu partages du code: https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code

Ton code "ne marche pas": que fait-il?

0

Ça marque:

Traceback (most recent call last):
File "‹input›" , line 1, in ‹module>
File "‹input>" , line 65, in jeu
File "‹input>", line 17, in coups
TypeError: int () argument must be a string, a bytes-like object or a number, not "NoneType*
0

Où est le bouton pour le Markdown?

On pourrait éditter et colorer de façon accessible et intelligente.

0
PierrotLeFou
1 nov. 2022 à 17:31

Problème classique. Erreur classique.
Il faut d'abord tester si les deux sont identiques, peu importe la valeur.
Ensuite, on donne dans un seul if les conditions gagnantes pour l'un deux séparées par un  or
Si c'est faux, c'est forcément l'autre qui gagne. Pas besoin de test. Le else suffit.

0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
4 nov. 2022 à 09:06

Bonjour,

moi, je fais ça avec des lettres (P, F, C)
je défini une liste qui donne quel objet gagne sur l'autre (le 1er gagne / 2eme):
precedence = ['FP', 'PC', 'CF']

ensuite je teste si les 2 choix sont égaux:
    (match nul)
sinon
    pour chaque element de precedence
        si choix_1+choix_2 = element :
            le 1er joueur gagne
        sinon choix_2+choix_1 = element :
            le 2eme joueur gagne

C'est plus court que de faire une longue série de if, elif pour tous les cas

0
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 551
4 nov. 2022 à 09:14

ou bien

si les 2 choix sont égaux:
    (match nul)
sinon
        si choix_1+choix_2 est dans la liste :
            le 1er joueur gagne
        sinon  :
            le 2eme joueur gagne
0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168 > yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024
4 nov. 2022 à 10:38

oui, c'est exactement ça ...

0
PierrotLeFou
4 nov. 2022 à 17:04

tif identiques: c'est égal
if condition1 or condition2 or condition3: le premier gagne
else: le second gagne

0