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 de boucle


Sujet :

Python

  1. #1
    Membre averti Avatar de garlinux
    Homme Profil pro
    nullos en Python
    Inscrit en
    Février 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : nullos en Python

    Informations forums :
    Inscription : Février 2018
    Messages : 19
    Par défaut Problème de boucle
    Bonsoir,
    Je me suis mis récemment à Python afin de créer de petits jeux pour ma fille qui est en CE1 (et aussi pour stimuler ma cervelle ^^).
    Je suis donc en train d'écrire un petit programme qui demande le résultat de la somme de deux chiffres ; mon problème est que le résultat affiché est toujours faux...
    Voici mon 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
    import random
    print ("**********************************************")
    print ("*                                            *")
    print ("*  Bienvenue dans le jeu des additions !!!   *")
    print ("*                                            *")
    print ("**********************************************")
    print (" ")
     
    prenomdujoueur = input ("Entre ton prénom : ")
    nombremaximal = int(input("Choisi le nombre maximal de l'addition : "))
    nombre1 = random.randint(1,nombremaximal)
    nombre2 = random.randint(1,nombremaximal)
    somme = nombre1 + nombre2
    print ("")
    print ("Combien font", nombre1, "+", nombre2, "?")
    saisiejoueur = input("?")
    while saisiejoueur != somme :
        if saisiejoueur != somme :
            print ("Erreur !!! Essaie encore !!!")
        else :
            print ("Félicitations !!!Tu sais bien compter", prenomdujoueur, "!!!")
    Avez-vous une petite idée pour que je fasse la boucle convenablement ?

    Je précise que je débute le Python aujourd'hui , en m'aidant uniquement du livre "Python pour les kids"
    Merci pour votre aide

  2. #2
    Membre chevronné
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Par défaut
    l'erreur est simple, input renvoie une chaine de caractère
    Vous pouvez soit convertir la réponse donnée en entier, soit convertir la réponse attendu en chaine de caractère

  3. #3
    Membre confirmé
    Homme Profil pro
    autodidacte
    Inscrit en
    Décembre 2018
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : autodidacte

    Informations forums :
    Inscription : Décembre 2018
    Messages : 100
    Par défaut
    Exact, et ton input met le dans ta boucle, pour pouvoir le changer quand c'est faux

  4. #4
    Membre averti Avatar de garlinux
    Homme Profil pro
    nullos en Python
    Inscrit en
    Février 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : nullos en Python

    Informations forums :
    Inscription : Février 2018
    Messages : 19
    Par défaut
    j'ai laissé tomber la boucle ,

    voici le code édité :

    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
    import random
    print ("**********************************************")
    print ("*                                            *")
    print ("*  Bienvenue dans le jeu des additions !!!   *")
    print ("*                                            *")
    print ("**********************************************")
    print (" ")
     
    prenomdujoueur = input ("Entre ton prénom : ")
    nombremaximal = int(input("Choisi le nombre maximal de l'addition : "))
    nombre1 = random.randint(1,nombremaximal)
    nombre2 = random.randint(1,nombremaximal)
    somme = int(nombre1 + nombre2)
    print ("")
    print ("Combien font", nombre1, "+", nombre2, "?")
    saisiejoueur = int(input("?"))
    if saisiejoueur != somme :
        print ("Erreur !!! Essaie encore !!!")
    else :
        print ("Félicitations !!!Tu sais bien compter", prenomdujoueur, "!!!")
    Pouvez-vous me dire comment placer la boucle ? merci.

  5. #5
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Par exemple, comme ceci :
    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
    import random
    print ("**********************************************")
    print ("*                                            *")
    print ("*  Bienvenue dans le jeu des additions !!!   *")
    print ("*                                            *")
    print ("**********************************************")
    print (" ")
     
    prenomdujoueur = input ("Entre ton prénom : ")
    nombremaximal = int(input("Choisi le nombre maximal de l'addition : "))
    nombre1 = random.randint(1,nombremaximal)
    nombre2 = random.randint(1,nombremaximal)
    somme = int(nombre1 + nombre2)
    print ("")
    print ("Combien font", nombre1, "+", nombre2, "?")
    saisiejoueur = ""
    cpt = 0
    while saisiejoueur != somme:
        cpt = cpt + 1
        saisiejoueur = int(input("? "))
        if saisiejoueur != somme :
            print ("Erreur !!! Essaie encore !!!")
        else :
            print ("""Félicitations !!!Tu sais bien compter, %s, \n
                   tu as résussi en %i coup(s) !!!""" %(prenomdujoueur,cpt))
    Avec quelques améliorations cosmétiques

  6. #6
    Membre averti Avatar de garlinux
    Homme Profil pro
    nullos en Python
    Inscrit en
    Février 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : nullos en Python

    Informations forums :
    Inscription : Février 2018
    Messages : 19
    Par défaut
    Merci pour ces améliorations !!!
    Je vais étudier ton code de plus près pour comprendre comment ça fonctionne

  7. #7
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 111
    Par défaut
    Bonjour,

    Est-ce que la structure conditionnelle ligne 21 et 23 est bien nécessaire ?

  8. #8
    Membre averti Avatar de garlinux
    Homme Profil pro
    nullos en Python
    Inscrit en
    Février 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : nullos en Python

    Informations forums :
    Inscription : Février 2018
    Messages : 19
    Par défaut
    Je ne comprends pas à quoi servent \n , et %

  9. #9
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 111
    Par défaut
    % est l'opérateur modulo, à l'heure actuelle pour faire du formatage de chaînes avec ce type d'opérateur, on utilisera le style printf.

    \n est un caractère représentant la fin de ligne.

  10. #10
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Citation Envoyé par garlinux Voir le message
    Je ne comprends pas à quoi servent \n , et %
    "\n" fait un retour à la ligne.
    Pour les %, c'est un peu plus délicat : il faut voir le formatage de l'affichage.
    %i indique que i sera remplacé par un entier (int) placé après la chaîne et %s indique que ce sera une chaîne. Ils sont pris dans l'ordre.
    On utilise préférentiellement format je crois maintenant.
    Si tu veux en savoir plus :
    https://python-reference.readthedocs...ormatting.html
    [edit] grillé

  11. #11
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Bonjour,

    Est-ce que la structure conditionnelle ligne 21 et 23 est bien nécessaire ?
    Pas grand intérêt, effectivement.
    Plus simple alors :
    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
    import random
    print ("**********************************************")
    print ("*                                            *")
    print ("*  Bienvenue dans le jeu des additions !!!   *")
    print ("*                                            *")
    print ("**********************************************")
    print (" ")
     
    prenomdujoueur = input ("Entre ton prénom : ")
    nombremaximal = int(input("Choisi le nombre maximal de l'addition : "))
    nombre1 = random.randint(1,nombremaximal)
    nombre2 = random.randint(1,nombremaximal)
    somme = int(nombre1 + nombre2)
    print ("")
    print ("Combien font", nombre1, "+", nombre2, "?")
    saisiejoueur = ""
    cpt = 0
    while saisiejoueur != somme:
        if cpt >= 1:
            print("Essaie encore : ")
        cpt = cpt + 1
        saisiejoueur = int(input("? "))
    print ("""Félicitations !!!Tu sais bien compter, %s, \n
                   tu as résussi en %i coup(s) !!!""" %(prenomdujoueur,cpt))

  12. #12
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 111
    Par défaut


    On peut aussi se demander l'intérêt de la fonction int ligne 13 mais ce n'est qu'un détail...

  13. #13
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Oups, effectivement : même pas vu...

  14. #14
    Membre averti Avatar de garlinux
    Homme Profil pro
    nullos en Python
    Inscrit en
    Février 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : nullos en Python

    Informations forums :
    Inscription : Février 2018
    Messages : 19
    Par défaut
    Merci pour votre aide à tous, grâce à vous je fais de grands pas dans la compréhension du python !!! encore merci !!!

    J'ai un peu modifié le programme avec vos conseils, voilà ce qu'il donne :

    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
    import random
    print ("**********************************************")
    print ("*                                            *")
    print ("*  Bienvenue dans le jeu des additions !!!   *")
    print ("*                                            *")
    print ("**********************************************")
    print (" ")
     
     
    prenomdujoueur = input ("Entre ton prénom : ")
    nombremaximal = int(input("Choisi le nombre maximal de l'addition : "))
    nombre1 = random.randint(1,nombremaximal)
    nombre2 = random.randint(1,nombremaximal)
    somme = int(nombre1 + nombre2)
    print ("")
    print ("Combien font", nombre1, "+", nombre2, "?")
    saisiejoueur = ""
    cpt = 0
    while saisiejoueur != somme:
        if cpt >= 1:
            print("Faux! Essaie encore!")
        cpt = cpt + 1
        saisiejoueur = int(input("? "))
    print ("""Félicitations, %s !!! Tu sais bien compter!!! Tu as réussi en %i coup(s) !!!""" %(prenomdujoueur,cpt))
    print ("")
     
    choix = input ("Veux-tu jouer de nouveau ? ")
    Cependant, je voudrais inclure une boucle afin de permettre au joueur de refaire une partie. Mais je ne sais pas comment la placer (il faut dire que j'étais habitué au GOTO )

  15. #15
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Très dégueu mais cela fonctionne :
    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
    prenomdujoueur = input ("Entre ton prénom : ")
    nombremaximal = int(input("Choisi le nombre maximal de l'addition : "))
    choix = "O"
    while choix == "O" or choix == "o":
        nombre1 = random.randint(1,nombremaximal)
        nombre2 = random.randint(1,nombremaximal)
        somme = nombre1 + nombre2
        print ("")
        print ("Combien font", nombre1, "+", nombre2, "?")
        saisiejoueur = ""
        cpt = 0
        while saisiejoueur != somme:
            if cpt >= 1:
                print("Faux! Essaie encore!")
            cpt = cpt + 1
            saisiejoueur = int(input("? "))
        print ("""Félicitations, %s !!! Tu sais bien compter!!! Tu as réussi en %i coup(s) !!!""" %(prenomdujoueur,cpt))
        print ("")
        choix = -1
        while choix != "O" and choix != "N":
            choix = input ("Veux-tu jouer de nouveau ? (O ou N) ")

  16. #16
    Membre averti Avatar de garlinux
    Homme Profil pro
    nullos en Python
    Inscrit en
    Février 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : nullos en Python

    Informations forums :
    Inscription : Février 2018
    Messages : 19
    Par défaut
    Merci beaucoup !!!!

  17. #17
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 111
    Par défaut
    Bonjour,

    Si on veut une boucle pour rejouer, tant qu'à faire autant le faire comprendre dans le code,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    tant que rejouer:
        # suite du code
     
        rejouer ?
            rejouer = False ou True

  18. #18
    Membre Expert
    Avatar de Pyramidev
    Homme Profil pro
    Tech Lead
    Inscrit en
    Avril 2016
    Messages
    1 515
    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 515
    Par défaut
    Citation Envoyé par garlinux Voir le message
    Cependant, je voudrais inclure une boucle afin de permettre au joueur de refaire une partie. Mais je ne sais pas comment la placer (il faut dire que j'étais habitué au GOTO )
    C'est le bon moment pour commencer à apprendre les fonctions et à les utiliser pour décomposer un problème en sous-problèmes plus simples :
    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
     
    def jouer_des_parties():
        prenom_du_joueur = input("Entre ton prénom : ")
        jouer = True
        while jouer:
            jouer_une_partie(prenom_du_joueur)
            choix = input("Veux-tu jouer de nouveau ? (O ou N) ")
            jouer = (choix == "O")
     
    def jouer_une_partie(prenom_du_joueur):
        nombre_maximal = int(input("Choisis la valeur maximale des nombres à additionner : "))
        if nombre_maximal < 1:
            print(f"Le nombre {nombre_maximal} est trop petit. Fin de la partie.")
            return
        nombre_1 = random.randint(1, nombre_maximal)
        nombre_2 = random.randint(1, nombre_maximal)
        somme = nombre_1 + nombre_2
        print()
        somme_trouvee = False
        nombre_d_essais = 0
        texte_a_afficher = f"Combien font {nombre_1}+{nombre_2} ? "
        while not somme_trouvee:
            nombre_d_essais += 1
            saisie_du_joueur = int(input(texte_a_afficher))
            somme_trouvee = (saisie_du_joueur == somme)
            if not somme_trouvee:
                texte_a_afficher = "Faux ! Essaie encore ! "
        print(f"Félicitations, {prenom_du_joueur} !!! Tu sais bien compter !!! Tu as réussi en {nombre_d_essais} coup(s) !!!")
     
    jouer_des_parties()
    Dans le code ci-dessus, pour comprendre la logique du code de jouer_des_parties, il n'y a pas besoin de savoir ce que fait en détails jouer_une_partie. De même, pour comprendre le code de jouer_une_partie, il n'y a pas besoin de lire le code qui l'appelle.

    À part ça, dans ce code, j'ai utilisé une fonctionnalité apparue dans Python 3.6 : les f-strings.
    Ce sont des chaînes préfixées par f. Dedans, quand on écrit une valeur entre accolades, c'est remplacé par la valeur en question (convertie en chaîne de caractères).

Discussions similaires

  1. Problème de boucles imbriquées
    Par Gnux dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 09/12/2005, 20h26
  2. [Tableaux] Problème avec boucle
    Par MYster dans le forum Langage
    Réponses: 6
    Dernier message: 11/11/2005, 18h39
  3. Problème de boucle
    Par TheUltimaSephiroth dans le forum C
    Réponses: 8
    Dernier message: 10/10/2005, 13h58
  4. Problème de boucle
    Par Louis-Guillaume Morand dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/09/2005, 09h10
  5. Problème de boucle
    Par basclln dans le forum C++
    Réponses: 19
    Dernier message: 02/04/2005, 09h13

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