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 :

Sortir d'une boucle while avec un input spécifique


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Alternant Ingénieur
    Inscrit en
    Juillet 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Alternant Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2021
    Messages : 13
    Points : 10
    Points
    10
    Par défaut Sortir d'une boucle while avec un input spécifique
    Bonjour,

    Je commence à apprendre python et je rencontre ma première difficulté !
    Le programme que je fais est un programme de pierre feuille ciseaux, et je veux que le programme tourne en boucle jusqu'à ce que l'utilisateur entre l'input exit ou x en lieu et place de sa réponse pierre/feuille/ciseau

    Ci-dessous le code :

    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
    import random
     
    def play():
        flag = True
        while flag:
            user = input(" Type \"rock\", \"paper\" or \"scissors\" !")
            computer = random.choice(["rock", "paper", "scissors"])
     
            if user == "exit" or user == "x":
                flag = False
                return "You exit the game."
     
     
            print(f"\n{user} vs {computer}...\n")
     
            if user == computer:
                return "Tie!"
     
            # Rock > Scissors, Scissors > paper, paper > Rock
            if is_win(user.lower(), computer.lower()): 
                return "You won !"
     
            elif is_win(computer.lower(), user.lower()):
                return "You lost ! :( "
     
     
    def is_win(player, opponent): #return true if 1st argument wins
        if (player == "rock" and opponent == "scissors") or (player == "scissors" and opponent == "paper")\
             or (player == "paper" and opponent == "rock" ):
            return True
     
     
    print(play())
    Mais la boucle ne marche pas, et je ne comprends pas pourquoi !
    Quelqu'un saurait m'expliquer pourquoi, et me guider vers la bonne pratique pour ce genre d'opération (sortir d'une boucle while) ? Merci d'avance !

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

    Citation Envoyé par James C Voir le message
    Quelqu'un saurait m'expliquer pourquoi, et me guider vers la bonne pratique pour ce genre d'opération (sortir d'une boucle while) ?
    Réfléchissez en français "tant que condition faire" ici votre condition est le booléen flag: sortir de la boucle à coup de "return" fonctionne aussi (on y préférera break et continue) mais alors le flag ne sert à rien.

    Quelque part votre code est incohérent... normal vous débutez à vouloir faire trop compliqué par rapport à vos capacités: ouvrez un tuto. il y a des exercices corrigés et toutes les explications que vous souhaitez.

    - W

  3. #3
    Membre à l'essai
    Homme Profil pro
    Alternant Ingénieur
    Inscrit en
    Juillet 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Alternant Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2021
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Rebonjour,

    Alors en fait c'est un programme que j'ai copié d'un tutoriel et que j'ai ensuite voulu mdoiifer pour rajouter la boucle et le système de sortie de la boucle.

    Le programme de base imprime le résultat de la fonction "play".
    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
    import random
     
    def play():
        user = input("What's your pick ? 'r' for rock, 'p' for paper, 's' for scissors\n")
        computer = random.choice(['r', 'p', 's'])
     
        if user == computer:
            return "It\'s a tie..."
     
        if is_win(user, computer):
            return "You won !"
     
        return "You lost !"
     
    def is_win(player, opponent):
        if (player == "r" and opponent == "s") or (player == "s" and opponent == "p") or (player == "p" and opponent == "r"):
            return True
     
    print(play())
    En le faisant par moi même de mon côté, j'exécute directement play et à la place de retourner un résultat d ela fonction play, j'imprime :
    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
    import random
     
    #play main function
    def play():
        flag = True
        while flag:
            user = input("Type \"rock\", \"paper\" or \"scissors\" !")
            computer =  random.choice(["rock", "paper", "scissors"])
     
            if user == "exit" or user == "x":
                flag = False
                print("You exit the game !")
                break
     
            print(f"\n{user} versus {computer}")
     
            if has_won(user, computer):
                print("You win !")
            elif has_won(computer, user):
                print("You lost :( !")
            else:
                print("Tie !")
     
    #tells me wether the first argument wins overthe 2d Boolean
    def has_won(player, opponent):
        #Papier bat pierre, pierre bat ciseaux, ciseax battent Papier
        if (player == "rock" and opponent == "scissors") or (player == "scissors" and opponent == "paper")\
             or (player == "paper" and opponent == "rock" ):
            return True
     
    play()
    Mon programme amrche très bien, mais du coup je n'imprime plus play. Est-ce que une structure comme j'ai fait est "bien" ? Je ne vois que des structures où on imprime un résultat, jamais où on exécute une fonction directement.

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

    Citation Envoyé par James C Voir le message
    Mon programme amrche très bien, mais du coup je n'imprime plus play. Est-ce que une structure comme j'ai fait est "bien" ?
    Est-ce que "play" affiche des messages ou les retourne à l'appelant qui en fait ce qu'il en veut?

    Ce n'est ni bien ni mal... juste une répartition différente du rôle et des responsabilités de chaque morceau que vous décidez suivant des critères non-techniques (pour l'utilisateur ça ne change rien)... et comme c'est vous qui décidez du découpage, c'est à vous de trouver les raisons qui vous feront préférer l'une ou l'autre.

    Qui plus est, ce n'est pas un sujet "python": ça ne dépend pas du langage.

    - W

  5. #5
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 906
    Points : 1 596
    Points
    1 596
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    Comme dit plus haut, si tu mets un break pour sortir de ta boucle inutile de te servir d'un flag.
    Autant partir sur :

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 754
    Points : 31 097
    Points
    31 097
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par James C Voir le message
    Est-ce que une structure comme j'ai fait est "bien" ?
    Ca signifie quoi "bien" ??? C'est un peu relatif comme notion.
    Ce que je vois c'est toutes ces répétitions inutiles (if machin == "scissors" and chose == "rock" or machin == "rock" and chose == "paper" etc). Tu n'as pas remarqué que dans le Shifoumi il y a une espèce de cycle (A gagne B, B gagne C et C gagne A). Tu aurais pu l'utiliser. Si par exemple tu dis "pierre=0, papier=1, ciseaux=2" alors quel que soit le choix joueur/computer, si (joueur+1) modulo(3) == computer alors computer gagne, et si (computer+1) modulo(3) == joueur alors joueur gagne.
    Et cette fonction has_won() que tu appelles deux fois. Pouvais pas lui faire renvoyer directement qui gagne ???
    Donc voilà. Ca fait pas très "alternant ingénieur"...

    Code python : 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
    #!/usr/bin/env python3
    # coding: utf-8
     
    # Shifoumi selon Big-Bang Théorie (la série)
    # 5 pièces: caillou, papier, ciseaux, lézard, Spock (celui de Star Trek)
    # Le caillou casse les ciseaux et écrase le lézard
    # Le papier désavoue Spock et attrape le caillou
    # Les ciseaux décapitent le lézard et coupent le papier
    # Le lézard empoisonne Spock et avale le papier
    # Spock explose les ciseaux et le caillou
     
    import random
     
    def play():
    	RCK=0x01
    	PPR=0x02
    	SCS=0x03
    	LZD=0x04
    	SPK=0x05
    	pieces={
    		RCK : {"label" : "caillou", "X" : (SCS, LZD)},
    		PPR : {"label" : "papier", "X" : (SPK, RCK)},
    		SCS : {"label" : "ciseaux", "X" : (LZD, PPR)},
    		LZD : {"label" : "lézard", "X" : (SPK, PPR)},
    		SPK : {"label" : "Spock", "X" : (SCS, RCK)},
    	}
     
    	score=[0, 0]
    	while True:
    		choix=input(
    			"Choissisez [%s] (Q pour quitter) :" % ", ".join(x["label"] for x in pieces.values())
    		)
    		if choix in "Qq": return score
    		joueur=txt2key(pieces, choix)
    		if joueur is None:
    			print("Choix [%s] incorrect - Recommencez" % choix)
    			continue
    		# if
     
    		computer=random.choice(tuple(pieces.keys()))
    		match=analyse(pieces, joueur, computer)
    		if match < 0: # Joueur
    			score[0]+=1
    			print("{} vs {}: le joueur gagne ({})".format(pieces[joueur]["label"], pieces[computer]["label"], score))
    		elif match > 0: # Computer
    			score[1]+=1
    			print("{} vs {}: le computer gagne ({})".format(pieces[joueur]["label"], pieces[computer]["label"], score))
    		else:
    			print("{} vs {}: égalité ({})".format(pieces[joueur]["label"], pieces[computer]["label"], score))
    	# while
    # play()
     
    def txt2key(pieces, txt):
    	for (k, v) in pieces.items():
    		if v["label"] == txt: return k
    	return None
    # txt2key()
     
    def analyse(pieces, j1, j2):
    	if j2 in pieces[j1]["X"]: return -1
    	if j1 in pieces[j2]["X"]: return 1
    	return 0
    # analyse()
     
    if __name__ == "__main__":
    	score=play()
    	print("Fin du jeu - Score %s" % score)
    # if
    Je ne sais pas si ce que j'ai fait est "bien". Ce que je sais en revanche, c'est que si je veux supprimer des pièces (exemple revenir au pierre/papier/ciseaux originel) me suffit de supprimer ce qui est en trop du dictionnaire "pièces" et hop, le reste du code s'adapte
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    pieces={
    	RCK : {"label" : "caillou", "X" : (SCS,)},
    	PPR : {"label" : "papier", "X" : (RCK,)},
    	SCS : {"label" : "ciseaux", "X" : (PPR,)},
    }

    De même demain un geek quelconque rajoute 2 pièces de plus avec les liaisons qui vont bien concernant le gain, me suffit de les rajouter selon la même syntaxe...

    Citation Envoyé par James C Voir le message
    Je ne vois que des structures où on imprime un résultat, jamais où on exécute une fonction directement.
    Et comment tu "imprimes" un résultat ? Via la fonction print() non ?? Et appeler print() ce n'est pas "exécuter une fonction directement" ???

  7. #7
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 906
    Points : 1 596
    Points
    1 596
    Billets dans le blog
    6
    Par défaut
    Sve@v: J'ai du mal comprendre comment s'organise/fonctionne ton code...

    Sinon pour faire une boucle avec un input, j'aime bien utiliser une boucle for avec iter():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    print("yopstop pour sortir")
    print('patati?')
    for patatruc in iter(input,'stop'):
        print(f"patatruc = {patatruc}\npatati?")

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 754
    Points : 31 097
    Points
    31 097
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Sve@v: J'ai du mal comprendre comment s'organise/fonctionne ton code...
    Hé oui, ça s'appelle le "talent"

    Dans le dictionnaire pivot du jeu, chaque pièce connait directement les clefs de celles qu'elle éclate. Exemple le lézard bat Spock et papier => LZD : {"label" : "lézard", "X" : (SPK, PPR)} (LZD="lézard" "X"=eXplose SPK="Spock" et PPR="paper"). Et tout ça dans un cycle fermé qu'on peut voir ici


    Ainsi si joueur 1 choisit "lezard", et que joueur 2 choisit "spock" ou "papier", cela signifie que la valeur "joueur2" est dans la clef "X" de la ligne du joueur 1 => le joueur 1 gagne
    Et si inversement (ce qui arrive fatalement si pas égalité) alors le joueur 2 gagne.
    Plus une fonction pour transformer le choix du joueur (choix littéral) en clef (exemple "Spock" doit donner SPK) car j'ai pas voulu utiliser les noms des pièces comme clef (ça laisse une ouverture par exemple vers une internationalisation).

    Citation Envoyé par Hominidé Voir le message
    Sinon pour faire une boucle avec un input, j'aime bien utiliser une boucle for avec iter():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    print("yopstop pour sortir")
    print('patati?')
    for patatruc in iter(input,'stop'):
        print(f"patatruc = {patatruc}\npatati?")
    Effectivement, lui j'y pense jamais

  9. #9
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 906
    Points : 1 596
    Points
    1 596
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Hé oui, ça s'appelle le "talent"


    En tout cas, il y a de l'expérience c'est certain
    Merci

  10. #10
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 754
    Points : 31 097
    Points
    31 097
    Billets dans le blog
    1
    Par défaut

  11. #11
    Membre averti
    Profil pro
    au repos
    Inscrit en
    Février 2013
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2013
    Messages : 160
    Points : 336
    Points
    336
    Par défaut
    Nom : cartoons-being-ian.gif
Affichages : 543
Taille : 79,7 Ko Nom : ufc-rock-paper-scissors.gif
Affichages : 507
Taille : 281,5 Ko

  12. #12
    Membre à l'essai
    Homme Profil pro
    Alternant Ingénieur
    Inscrit en
    Juillet 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Alternant Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2021
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Wow, je m'attendais pas à tant de condescendance...

    Citation Envoyé par Sve@r Voir le message

    Ca fait pas très "alternant ingénieur"...
    Qui t'as dis que j'étais alternant ingénieur en développement logiciel ? J'étudie le génie industriel et j'apprends à coder avec python depuis littéralement 2 jours sur le côté. Coder n'est pas ma spécialité et ne le sera jamais.
    De plus,

    Citation Envoyé par James C Voir le message
    Alors en fait c'est un programme que j'ai copié d'un tutoriel et que j'ai ensuite voulu modifier pour rajouter la boucle et le système de sortie de la boucle.
    Il suffisait littéralement de me lire pour comprendre que je suis pas à l'origine de ce bout de programme. J'ai essayer de rajouter une fonctionnalité à un pré-existant.
    Ca fait pas très ingénieur en développement logiciel

    Citation Envoyé par Sve@r Voir le message
    Et comment tu "imprimes" un résultat ? Via la fonction print() non ?? Et appeler print() ce n'est pas "exécuter une fonction directement" ???
    Ba print(play()) n'a pas l'air de fonctionner comme play(), et je ne vois que des programmes faisant appel à print, aucun lançant des fonctions directement, alors que ça a l'air de marcher dans les deux cas.

    J'étais habitué à un meilleur accueil sur les forum de developpez.net, heureusement cependant qu'on trouve d'autres gen bienveillants. Merci à ceux-là du coup .

  13. #13
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 906
    Points : 1 596
    Points
    1 596
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    Ne t'en formalise pas, l'important c'est que tu as obtenu la réponse à ton interrogation (enfin j'espère)
    Si besoin, n'hésite surtout pas à poser des questions.

  14. #14
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 754
    Points : 31 097
    Points
    31 097
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par James C Voir le message
    Ba print(play()) n'a pas l'air de fonctionner comme play()
    print() affiche un truc. Il suffit que play() renvoie quelque chose pour que print() l'affiche.
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def play(x): return x*x
     
    print(play(5))

    Dans ton code, ton play() ne renvoyant rien, print() n'avait donc rien à afficher. Certes ton play() affiche des trucs à l'écran, mais "afficher" ce n'est pas "renvoyer".

    Citation Envoyé par James C Voir le message
    J'étais habitué à un meilleur accueil sur les forum de developpez.net, heureusement cependant qu'on trouve d'autres gen bienveillants. Merci à ceux-là du coup .
    Tu confonds "bienveillance" et "flagornerie". Tout ce que je t'ai écrit étaient de vrais conseils qui permettront de t'améliorer (tu n'as jamais dit "je viens ici mais en fait je n'ai pas envie de coder ni m'améliorer en codage"). Le code est un vrai code écrit de façon professionnelle pour que tu voies ce qu'on peut faire et comment on peut le faire. Mais bon, c'est pas grave, de rien.

  15. #15
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Tech Lead
    Inscrit en
    Avril 2016
    Messages
    1 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Tech Lead

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 495
    Points : 6 212
    Points
    6 212
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Si par exemple tu dis "pierre=0, papier=1, ciseaux=2" alors quel que soit le choix joueur/computer, si (joueur+1) modulo(3) == computer alors computer gagne, et si (computer+1) modulo(3) == joueur alors joueur gagne.
    On peut aussi appliquer une règle dans ce genre avec la version The Big Bang Theory que tu as citée.
    En effet, si pierre=0, spock=1, papier=2, lézar=3 et ciseaux=4, alors :
    • Le joueur gagne contre l'ordinateur si et seulement si joueur - ordinateur = 1 ou 2 modulo 5.
    • Le joueur perd contre l'ordinateur si et seulement si joueur - ordinateur = 3 ou 4 modulo 5.

    On peut aussi généraliser à n éléments, n étant impair :
    • Le joueur gagne contre l'ordinateur si et seulement si joueur - ordinateur est entre 1 et (n - 1)/2 modulo n.
    • Le joueur perd contre l'ordinateur si et seulement si joueur - ordinateur est entre (n + 1)/2 et n - 1 modulo n.

    EDIT 20h50 : "modulo 5" remplacé par "modulo n" (erreur signalée par Sve@r à 11h46).

  16. #16
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 754
    Points : 31 097
    Points
    31 097
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Pyramidev Voir le message
    On peut aussi appliquer une règle dans ce genre avec la version The Big Bang Theory que tu as citée.
    En effet, si pierre=0, spock=1, papier=2, lézar=3 et ciseaux=4, alors :
    • Le joueur gagne contre l'ordinateur si et seulement si joueur - ordinateur = 1 ou 2 modulo 5.
    • Le joueur perd contre l'ordinateur si et seulement si joueur - ordinateur = 3 ou 4 modulo 5.
    Hum... il faut alors bien gérer l'ordre des pièces (ce qui est moins critique dans la version classique). Mais oui c'est bien trouvé
    Attention pour la suite de ton post c'est modulo n et non modulo 5.

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

Discussions similaires

  1. [AC-2000] Sortir d'une boucle while wend
    Par 973thom dans le forum VBA Access
    Réponses: 2
    Dernier message: 03/09/2009, 11h14
  2. Sortir d'une boucle while
    Par dahu007 dans le forum Langage
    Réponses: 14
    Dernier message: 15/06/2008, 18h33
  3. comment sortir d'une boucle while d'un Iterator
    Par solawe dans le forum Langage
    Réponses: 6
    Dernier message: 18/03/2008, 14h46
  4. Sortir d'une boucle while
    Par chris81 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 21/01/2008, 12h50
  5. Probleme pour sortir d'une boucle while
    Par aikinhdo dans le forum Langage
    Réponses: 0
    Dernier message: 27/07/2007, 16h01

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