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 avec while


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 9
    Par défaut Problème avec while
    Bonjour

    Je programme un jeu sur python, et à la fin du jeu, je demande si le joueur veut rejouer. Le problème c'est que si le joueur répond autre chose que oui ou non, le programme ne détecte pas la réponse. J'ai donc essayé de faire un programme qui demande si il veut rejouer et si la réponse n'est pas bonne, il demande au joueur de re écrire sa réponse. Le problème, après avoir écrit une mauvaise réponse, c'est que je reste coincé dans la boucle while même si j'écris une bonne réponse(oui ou non).
    Pouvez vous m'aider ?

    Cordialement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    voeux = input("\n\nVoulez-vous rejouer ? oui ou non\n")              # Demander si les joueurs veut rejouer
     
    if not voeux=="non" and not voeux=="oui":                               # Si la reponse est ni non ni oui
        while  voeux != "oui" or voeux != "non":                                 # faire tant que la reponse n'es pas oui ou non
            print("Erreur, mauvaise entrée \n\n")                                 # Dire que l réponse n'est pas bonne
            voeux = input("Voulez-vous rejouer ? oui ou non\n")           # redemander si le joueur veut rejouer
    if voeux =="oui":                                                                     # si la reponse est oui
        print("oui")
    else:                                                                                       # sinon
        print("non")

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Salut,

    Citation Envoyé par AwFull_Nexus Voir le message
    Le problème, après avoir écrit une mauvaise réponse, c'est que je reste coincé dans la boucle while même si j'écris une bonne réponse(oui ou non).
    Pouvez vous m'aider ?
    Pour quelles valeurs de la variable voeux la condition voeux != "oui" or voeux != "non" est elle vraie? Quelle est la différence entre un OU et un ET logique?

    En général, si votre code ne fait pas ce que vous en attendez, c'est que Python se contente d'exécuter ce que vous lui avez demandé et non ce que vous avez pensé qu'il allait faire. A vous de relire ce que vous avez écrit et faire fonctionner votre cerveau pour comprendre ce qui se passe (mal).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Bonjour

    1) Première simplification de votre code, juste pour y voir un peu plus clair.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    voeux = input("\n\nVoulez-vous rejouer ? oui ou non\n")              # Demander si les joueurs veut rejouer
     
    while  voeux != "oui" or voeux != "non":              # faire tant que la reponse n'est pas oui ou non
        print("Erreur, mauvaise entrée \n\n")                                 # Dire que l réponse n'est pas bonne
        voeux = input("Voulez-vous rejouer ? oui ou non\n")           # redemander si le joueur veut rejouer
     
    print(voeux)
    2) Ensuite pour résoudre le problème, vous avez bien identifier que vous ne sortez jamais de la boucle while une fois entré dedans. Pourquoi ? Parce que la condition que vous donnez est toujours vraie !
    Cas 1 : voeux vaut 'toto', voeux != "oui" est vrai, et voeux != "non" est vrai. On a donc, Vrai ou Vrai --> Vrai
    Cas 2 : voeux vaut 'oui' , voeux != "oui" est faux, et voeux != "non" est vrai. On a donc, Faux ou Vrai --> Vrai
    Cas 3 : voeux vaut 'non', voeux != "oui" est vrai, et voeux != "non" est faux. On a donc, Vrai ou Faux --> Vrai

    Dans tous les cas votre condition est toujours vraie donc fatalement, vous ne sortez jamais du while ...
    Mais quid de la condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    not voeux=="non" and not voeux=="oui"
    que vous avez également écrite dans le if au départ, et quid j'ai simplifié car elle est censé être la même que celle du while bien qu'elle n'ait pas la même forme ?

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Je vous trouve compliqués.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    def ask_replay():
        return input("\n\nVoulez-vous rejouer ? oui ou non\n")
     
    rep = ask_replay()
    while rep not in ('oui', 'non'):
        rep = ask_replay()
     
    print(rep)

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Je vous trouve compliqués.
    Faire autrement ne dit rien sur la cause du problème. Et l'algèbre de Boole et les tables de vérités sont aux programmes de maths de 1ère.... autant réviser un peu.

    Après côté programmation, sûr que Python n'ayant pas de do... while, on est dans ce cas un peu limité et forcé à écrire une sortie forcée genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while 'oui ou non':
        voeux =  input('Voulez-vous rejouer ? oui ou non\n')
        if voeux == 'oui' or voeux == 'non':
              break
        print('Erreur, mauvaise entrée', voeux)
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 9
    Par défaut
    Ok, merci à tous, j'ai compris mes erreurs. Je vais voir tous ça. Au moins vous m'avez débloqué.
    Merci encore.

Discussions similaires

  1. Problème avec while
    Par dot-_-net dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 20/04/2008, 16h14
  2. [MySQL] problème avec while
    Par scastong dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 28/02/2008, 20h42
  3. [MySQL] problème avec while
    Par dudu134 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 13/11/2007, 08h51
  4. [MySQL] Problème avec while
    Par Whinze dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 03/06/2007, 17h33
  5. [Tableaux] problème avec while
    Par zimotep dans le forum Langage
    Réponses: 3
    Dernier message: 11/09/2005, 10h30

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