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 :

la boucle While


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    sciences économiques
    Inscrit en
    Octobre 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Maroc

    Informations professionnelles :
    Activité : sciences économiques
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2019
    Messages : 8
    Par défaut la boucle While
    bonjour,
    vraiment je trouve cet exercice très difficile et j’espère de trouver un petit d'aide ici.

    Enoncé

    Écrire un programme qui réalise un petit jeu. Il reçoit deux valeurs entières en entrée, une valeur initiale entre 1 et 99 et une valeur cible différente de la valeur initiale, de valeur entre 0 et 99. Le programme va calculer une valeur courante, initialement la valeur initiale, et vérifier si en incrémentant de façon répétitive la valeur courante de la valeur initiale , modulo 100 (ce qui donne à chaque fois une valeur courante entre 0 et 99), la valeur courante aboutira un moment à la valeur cible.

    Dans ce cas, votre programme dira qu’il a trouvé.

    Par contre, si la valeur cible n’est pas atteinte lors des incrémentations modulo 100 et que la valeur courante retrouve à nouveau la valeur initiale, votre programme s’arrête en concluant que l’on n’a pas trouvé. En effet dans ce cas, les valeurs calculées vont à nouveau être les mêmes sans jamais valoir la valeur cible.

    Après avoir lu les deux valeurs initiale et cible, votre programme affichera chaque valeur sur une ligne différente, la valeur de initiale suivie de toutes les valeurs de courante sauf la dernière qui sera soit la valeur de cible soit la valeur de initiale, et terminera par l’affichage, sur une nouvelle ligne, du message donnant le résultat :

    "Pas trouvé" si la valeur courante est revenue à la valeur initiale,

    "Cible atteinte" si votre programme a trouvé.

    Vous pouvez supposer que les valeurs lues sont bien des entiers qui respectent les consignes.

    exmple 1

    Avec les données lues suivantes :

    9
    7

    le résultat à imprimer vaudra :

    9
    18
    27
    36
    45
    54
    63
    72
    81
    90
    99
    8
    17
    26
    35
    44
    53
    62
    71
    80
    89
    98
    Cible atteinte


    mon code c'est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    a = int(input())
    b = int(input())
    c = 0
    while a in range (1, 100) and b in range (100)  and a != b :
        c = (c  + a) % 100
        print(c)
        if c == b:
            print("Cible atteinte")
        if c == a:
            print("Pas trouvé")

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

    Quand vous écrivez une boucle while condition, vous devez vérifier que la condition passera à faux sinon çà ne se terminera jamais.
    Dans la pratique, si la condition est du genre a in range (1, 100) and b in range (100) and a != b et que a et b ne changent pas dans la boucle...

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

  3. #3
    Membre régulier
    Homme Profil pro
    sciences économiques
    Inscrit en
    Octobre 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Maroc

    Informations professionnelles :
    Activité : sciences économiques
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2019
    Messages : 8
    Par défaut Merci bien
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Quand vous écrivez une boucle while condition, vous devez vérifier que la condition passera à faux sinon çà ne se terminera jamais.
    Dans la pratique, si la condition est du genre a in range (1, 100) and b in range (100) and a != b et que a et b ne changent pas dans la boucle...

    - W

    merci bien @wiztricks
    prière de me simplifier les choses .

  4. #4
    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 hkrimi Voir le message
    merci bien @wiztricks
    prière de me simplifier les choses .
    Ce ne serait pas à vous plutôt de simplifier votre charabia ?
    Par ailleurs, on vous a conseillé de ne pas modifier les variables qui définissent la boucle.

  5. #5
    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
    Suivez plus minutieusement les instructions qu'on vous donne.

    On a un nombre X et un nombre Y
    while True :
    * On incrémente X de façon infinie
    * S'il dépasse 100 on lui retire 100 (ou on le met modulo 100 ce qui revient au même)
    * S'il atteint le nombre Y on a gagné
    * S'il atteint de nouveau le nombre X initial on a alors fait le tour de toutes les possibilités sans trouver et on a perdu

    Chaque * est une ligne (ou un bloc) de code à l'intérieur du while. Ce sont des opérations élémentaires, faites les 1 par 1, n'essayez pas de tout faire en même temps.
    Autre indice : pour les 2 derniers * vous aurez besoin de l'instruction break

  6. #6
    Membre régulier
    Homme Profil pro
    sciences économiques
    Inscrit en
    Octobre 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Maroc

    Informations professionnelles :
    Activité : sciences économiques
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2019
    Messages : 8
    Par défaut Merci Bien @lg_53
    Citation Envoyé par lg_53 Voir le message
    Suivez plus minutieusement les instructions qu'on vous donne.

    On a un nombre X et un nombre Y
    while True :
    * On incrémente X de façon infinie
    * S'il dépasse 100 on lui retire 100 (ou on le met modulo 100 ce qui revient au même)
    * S'il atteint le nombre Y on a gagné
    * S'il atteint de nouveau le nombre X initial on a alors fait le tour de toutes les possibilités sans trouver et on a perdu

    Chaque * est une ligne (ou un bloc) de code à l'intérieur du while. Ce sont des opérations élémentaires, faites les 1 par 1, n'essayez pas de tout faire en même temps.
    Autre indice : pour les 2 derniers * vous aurez besoin de l'instruction break
    bonjour;
    vraiment je essai de suivre vos instructions mais je n'arrive pas à aucune solutions, il y a quelques chose qui je ne comprend pas. merci bien à vos aides.

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    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 833
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par hkrimi Voir le message
    vraiment je trouve cet exercice très difficile et j’espère de trouver un petit d'aide ici.
    mon code c'est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    a = int(input())
    b = int(input())
    c = 0
    while a in range (1, 100) and b in range (100)  and a != b :
        c = (c  + a) % 100
        print(c)
        if c == b:
            print("Cible atteinte")
        if c == a:
            print("Pas trouvé")
    Avant de coder, il faut essayer de trouver une "façon de faire" qui soit simple à apréhender pour l'ordinateur. Parce que typiquement, while a in range (1, 100) and b in range (100) and a != b : ça ne veut absolument rien dire de cohérent (déjà est-ce que pour toi ça veut dire quelque chose ???)

    Donc que se passe-t-il réellement ?
    • On a un nombre X et un nombre Y
    • On incrémente X de façon infinie
    • S'il dépasse 100 on lui retire 100 (ou on le met modulo 100 ce qui revient au même)
    • S'il atteint le nombre Y on a gagné
    • S'il atteint de nouveau le nombre X initial on a alors fait le tour de toutes les possibilités sans trouver et on a perdu


    De là, moi je verrais bien une boucle infinie => while True et dans la boucle réaliser l'incrément et les tests gagnant/perdant. Et sortir si un de ces deux tests se réalise.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Membre régulier
    Homme Profil pro
    sciences économiques
    Inscrit en
    Octobre 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Maroc

    Informations professionnelles :
    Activité : sciences économiques
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2019
    Messages : 8
    Par défaut Merci @Sve@r
    Citation Envoyé par Sve@r Voir le message
    Bonjour


    Avant de coder, il faut essayer de trouver une "façon de faire" qui soit simple à apréhender pour l'ordinateur. Parce que typiquement, while a in range (1, 100) and b in range (100) and a != b : ça ne veut absolument rien dire de cohérent (déjà est-ce que pour toi ça veut dire quelque chose ???)

    Donc que se passe-t-il réellement ?
    • On a un nombre X et un nombre Y
    • On incrémente X de façon infinie
    • S'il dépasse 100 on lui retire 100 (ou on le met modulo 100 ce qui revient au même)
    • S'il atteint le nombre Y on a gagné
    • S'il atteint de nouveau le nombre X initial on a alors fait le tour de toutes les possibilités sans trouver et on a perdu


    De là, moi je verrais bien une boucle infinie => while True et dans la boucle réaliser l'incrément et les tests gagnant/perdant. Et sortir si un de ces deux tests se réalise.

    bonjour @Sver@r

    par ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while a in range (1, 100) and b in range (100)  and a != b
    je veux dire que a est entre 1 et 99 et b entre 0 et 99 et que a doit diffère b.

    votre recommandations ce sont elles que je essai de transformer en code. Merci bien de rectifier avec avec moi mon code initial.
    bien à vous.

  9. #9
    Membre émérite Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 593
    Par défaut
    Citation Envoyé par hkrimi Voir le message
    mon code c'est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    a = int(input())
    b = int(input())
    c = 0
    while a in range (1, 100) and b in range (100)  and a != b :
    On va reprendre au départ.
    a, b, c sont définis avant la boucle.

    A quoi servent les contrôles du while ?
    Ils devraient servir à savoir s'il faut entrer dans la boucle et exécuter pour la première ou n-ième fois le bloc contrôlé par le while.

    Là, on a "a in range(1,100) and b in range(100) and a != b" qui semblent plutôt contrôler - maladroitement - les valeurs saisies pour a et b.
    Est-ce le moment ?? N'y a-t-il pas une façon plus claire et simple de tester les limites ? Range() génère une liste de nombres. Pas très économe comme test...

    Et seul c change dans la boucle while, mais sa valeur n'est pas contrôlée pour en sortir.

    Revois la logique comme indiqué par les autres contributeurs. La solution viendra plus facilement.

Discussions similaires

  1. boucle while trop lente
    Par atouze dans le forum Access
    Réponses: 17
    Dernier message: 15/06/2005, 16h35
  2. Boucle while & read
    Par gibet_b dans le forum Linux
    Réponses: 4
    Dernier message: 29/04/2005, 15h38
  3. boucle while et post incrémentation
    Par tut dans le forum C++
    Réponses: 7
    Dernier message: 10/12/2004, 17h24
  4. [MFC] Dialog dans une boucle while
    Par oxor3 dans le forum MFC
    Réponses: 5
    Dernier message: 23/04/2004, 22h51
  5. [débutant]Documentation? boucle "while"? Session?
    Par o151181 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 19/01/2004, 15h20

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