Bonjour, dans mon programme python, à l'avant dernière ligne, avec la boucle while ligne 30 :
import time
print("""-----------------------------------
--------Jeu \"Plus ou moins\"--------
-----------------------------------""")
time.sleep(1)
def nombre_de_joueur():
joueur = 0
while joueur == 0:
try:
joueur = int(input("Vous êtes : [1] Un joueur, [2] 2 Joueur ? : "))
except ValueError:
print("ERREUR: Vous devez rentrer un nombre.")
return joueur
def choix_du_niveau():
niveau = 0
while niveau == 0:
try:
niveau = int(input("Niveau : [1] Facile, [2] Moyen, [3] Dificile ? : "))
except ValueError:
print("ERREUR: Vous devez rentrer un nombre.")
return niveau
joueurs = 0
while not joueurs == 1 or not joueurs == 2:
joueurs = nombre_de_joueur()
print("suite")
J'ai mes 2 variables "joueurs", or quand l'utilisateur choisi le choix 2, le programme reste dans la boucle, et après, impossible de sortir de la boucle ...
Par contre quand le met : and à la place de or :
while not joueurs == 1 and not joueurs == 2:
La, ça fonctionne bien, le choix 1 ou 2 sort de la boucle, cependant ce n'est pas logique, car on choisis 1 ou 2, pas 1 et 2 ... Je ne saisie pas tout.
OR : Tant que joueurs ne vaut pas 1 ou tant que joueurs ne vaut pas 2, faire ...
Si joueurs == 2 alors on a while True or False :donc la logique veut que si l'un des deux est vrai alors c'est vrai on reste donc dans la boucle, ce qui est le cas ici.
AND : Tant que joueurs ne vaut pas 1 et tant que joueurs ne vaut pas 2, faire ...
Si joueurs == 2 alors on a while True and False :donc la logique veut que les deux doivent être vrais pour rester dans la boucle ce qui n'est pas le cas ici.
PS : Tu peux écrire ton code autrement :
import time
print("""-----------------------------------
--------Jeu \"Plus ou moins\"--------
-----------------------------------""")
time.sleep(1)
def nombre_de_joueur():
joueurs = 0
while joueurs not in (1, 2):
try:
joueurs = int(input("Vous êtes : [1] Un joueur, [2] 2 Joueur ? : "))
except ValueError:
print("ERREUR: Vous devez rentrer un nombre.")
return joueurs
joueurs = nombre_de_joueur()
Bonjour. Avec le or, ta boucle se traduit de la sorte : 'on continue à boucler tant que joueurs ne vaut pas 1 ou que joueurs ne vaut pas 2'. En utilisant le théorème de morgan on sait que cela est équivalent à 'on continue à boucler tant que l'on a pas (joueurs vaut 1 et joueurs vaut 2). En notation: not(j == 1) or not(j == 2) <=> not(j == 1 and j == 2). Il est évident qu'aucune valeur de j ne vérifie j == 1 and j == 2, et par conséquent la négation n'est pas falsifiable, d'où la condition pour continuer à boucler est toujours vérifiée, d'où on ne sort jamais de la boucle. Lorsque tu vois que chaque terme d'une conjonction ou d'une disjonction est une négation, il est de bon ton de simplifier en factorisant la négation. Un peu comme quand tous les termes d'une addition ou d'une multiplication sont négatifs: il est alors probablement plus pratique de factoriser -1 en dehors de l'addition ou de la multiplication.
while joueurs != 1 and joueurs != 2
Et c'est encore mieux si on peut directement se passer de négation.
while not joueurs == 1 and not joueurs == 2: Tant que c'est vrai que joueurs n'est pas (not) égal à 1 et (and) pas égal à 2, je continue à boucler On pourrait aussi écrire: while joueurs not in (1, 2):
- Edité par PierrotLeFou 28 décembre 2021 à 3:29:58
Le Tout est souvent plus grand que la somme de ses parties.
Indépendamment des tests logiques, quite à écrire une fonction qui saisisse le nombre de joueurs autant lui faire faire aussi le boulot du test des nombres valides attendus....
def nombre_de_joueur():
while True:
try:
joueur = int(input("Vous êtes : [1] Un joueur, [2] 2 Joueur ? : "))
except ValueError:
print("ERREUR: Vous devez rentrer un nombre.")
else:
if not (0 < joueur <= 2):
print('ERREUR: le nombre de joueur doit être 1 ou 2')
else:
return joueur
OR ou AND
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
typage structurel ftw
Le Tout est souvent plus grand que la somme de ses parties.