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

  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 688
    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 688
    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 prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 813
    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 813
    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]

  4. #4
    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 .

  5. #5
    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.

  6. #6
    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.

  7. #7
    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

  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 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.

  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.

  10. #10
    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
    Citation Envoyé par hkrimi Voir le message
    bonjour;
    vraiment je essai de suivre vos instructions mais je n'arrive pas à aucune solutions
    Et bien montre tes essais. Car sinon on ne va pas t'aider plus.

    Comment codes tu "On incrémente X" ?
    Comment codes tu "S'il dépasse 100 on lui retire 100 (ou on le met modulo 100 ce qui revient au même)" ?
    Comment codes tu "S'il atteint le nombre Y on a gagné" ?
    Comment codes tu "S'il atteint de nouveau le nombre X initial on a alors perdu" ?

    Proposes du code pour chacun de ces 4 points

  11. #11
    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 Bonjour @lg_53
    Citation Envoyé par lg_53 Voir le message
    Et bien montre tes essais. Car sinon on ne va pas t'aider plus.

    Comment codes tu "On incrémente X" ?
    Comment codes tu "S'il dépasse 100 on lui retire 100 (ou on le met modulo 100 ce qui revient au même)" ?
    Comment codes tu "S'il atteint le nombre Y on a gagné" ?
    Comment codes tu "S'il atteint de nouveau le nombre X initial on a alors perdu" ?

    Proposes du code pour chacun de ces 4 points
    bonjour lg_53;
    je suis désolé pour le dérangement,
    prière de valider avec moi ce code que j’écris suite à votre instructions, et merci bien

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

  12. #12
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 813
    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 813
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par hkrimi Voir le message
    prière de valider avec moi ce code que j’écris suite à votre instructions, et merci bien
    Et pourquoi tu ne le fais pas valider par Python lui-même ?

    Citation Envoyé par hkrimi Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    a = int(input())
    b = int(input())
    c = 0
    while a < 100:
        c += a
        c = c % 100
        print(c)
        if c == b:
            print("Cible atteinte")
        if c == a:
            print("Pas trouvé")
    Mouais. Ce code n'est pas loin de "fonctionner par erreur"...

    Bon, déjà le premier while a < 100 est-ce que ça ressemble à la boucle infinie que j'ai mentionnée, que j'ai écrite et que lg_53 a reprise de façon littérale pour développer ses propres explications ? Ben il se trouve que oui car si a est inférieur à 100 comme il n'est pas modifié il le reste indéfiniment.
    Mais bon, c'est pur hasard quoi. Pourtant lg_53 et moi avions écrit l'instruction exacte. Pourquoi tu ne l'as pas pas reprise ?

    Ensuite tu testes si c tombe sur le nombre initial ou sur la cible ok. Toutefois ça ne te vient pas à l'idée alors de sortir de la boucle ? Et donc rajouter l'instruction de sortie de boucle => break ??? Sans déconner quoi, faut arrêter de faire le boulet et réfléchir aussi un peu par toi-même quoi.
    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]

  13. #13
    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 pour votre aide
    Citation Envoyé par Sve@r Voir le message
    Et pourquoi tu ne le fais pas valider par Python lui-même ?

    Mais bon, c'est pur hasard quoi. Pourtant lg_53 et moi avions écrit l'instruction exacte. Pourquoi tu ne l'as pas pas reprise ?

    Ensuite tu testes si c tombe sur le nombre initial ou sur la cible ok. Toutefois ça ne te vient pas à l'idée alors de sortir de la boucle ? Et donc rajouter l'instruction de sortie de boucle => break ??? Sans déconner quoi, faut arrêter de faire le boulet et réfléchir aussi un peu par toi-même quoi.
    bonjour.
    j'essaie sur paythontutor.com et sur Thoony le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    a = int(input())
    b = int(input())
    c = 0
    while True:
        c += a
        c = c % 100
        print(c)
        if c == b:
            print("Cible atteinte")
            break
        if c == a:
            print("Pas trouvé")
    je trouve un résultat avec le 7 avant ("Cible atteinte") ce qui ne laisse pas ce à validé par UpyLab, en plus nos enseignants ne préconisent pas l'utilisation de l'instruction break.
    vraiment cet exercice a prend plusieur temps sans arrivé a une solutions.
    merci bien pour votre aide et vos conseils.

  14. #14
    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
    Et si c == a vous ne breaker pas ?
    Et si vos profs aime pas break, suffit de les enlever et de remettre les conditions dans le test de boucle, du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while c !=a and c !=b :

  15. #15
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 813
    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 813
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par hkrimi Voir le message
    vraiment cet exercice a prend plusieur temps sans arrivé a une solutions.
    vraiment ? sans déconner quoi, tous ceux qui sont intervenus sur ce forum l'ont résolu en moins de 3 minutes et en moins de 10 lignes !!!

    Citation Envoyé par hkrimi Voir le message
    en plus nos enseignants ne préconisent pas l'utilisation de l'instruction break.
    Ils ne "préconisent pas" le break ok. Mais est-ce qu'ils l'interdisent ???
    Alors oui il y a des puristes extrémistes qui refusent le break et le continue. Tout comme il y a eu des puristes extrémistes qui brûlaient ceux qui disaient que c'était la Terre qui tournait autour du Soleil.
    Et tout comme ces derniers se sont éteints face à l'avancée de la connaissance, ceux-là aussi s'éteindront. Parce que franchement, entre
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    v=int(input("Entrez un nombre :"))
    while v != 0:
    	print(v)
    	v=int(input("Entrez un nombre :"))
    # while
    et
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while True:
    	v=int(input("Entrez un nombre :"))
    	if v == 0: break
    	print(v)
    # while
    pour moi il n'y a pas d'ambigüité sur l'écriture que je préfère. Parce que même la solution de lg_53 while c != a and c != b oblige à retester une seconde fois "a" ou "b" pour savoir si on a gagné ou perdu. Alors ok mal utilisés, le break et continue c'est comme tout le reste => ça fout la zone. Mais refuser ces instructions valides juste pour des raisons... pour lesquelles au fait ? Bon tu m'as compris quoi.
    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]

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

    Citation Envoyé par hkrimi Voir le message
    en plus nos enseignants ne préconisent pas l'utilisation de l'instruction break.
    Ils ont leurs raisons et probablement un but pédagogique louable.
    Mais regardez cette construction où on sort en testant plusieurs conditions avec un break:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while True
        if ....:
           ...
           break
        if ....:
           ...
           break
    on peut facilement la remplacer par un "drapeau":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    done = False
    while not done:
       if ....:
           ...
           done = True
        if ....:
           ...
           done = True
    Citation Envoyé par hkrimi Voir le message
    vraiment cet exercice a prend plusieur temps sans arrivé a une solutions.
    C'est parce que vous espérez qu'on va l'écrire à votre place

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

  17. #17
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 813
    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 813
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    ...et probablement un but pédagogique louable.
    Perso je ne pense pas. Il n'y a aucun but pédagogique louable à refuser systématiquement une instruction à cause d'obscures superstitions. C'est comme si le prof de math refusait qu'on use de la multiplication sous prétexte qu'on peut faire la même chose avec des additions.

    Citation Envoyé par wiztricks Voir le message
    Mais regardez cette construction où on sort en testant plusieurs conditions avec un break:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while True
    	if ....:
    		...
    		break
    	if ....:
    		...
    		break
    on peut facilement la remplacer par un "drapeau":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    done = False
    while not done:
    	if ....:
    		...
    		done = True
    	if ....:
    		...
    		done = True
    Ok ici c'est équivalent (avec toutefois tous les autres tests effectués inutilement si le premier est vrai ; et un test de plus sur le while not done pour la seconde écriture).

    Malheureusement il suffit d'un minuscule ajout pour que le remplacement par un drapeau ne marche plus...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while True
    	if ....:
    		...
    		break
    	if ....:
    		...
    		break
    	instructionX
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    done = False
    while not done:
    	if ....:
    		...
    		done = True
    	if ....:
    		...
    		done = True
    	instructionX
    Vas-y, viens me dire qu'il suffit de remplacer instructionX par if not done: instructionX juste pour me faire rire...

    Citation Envoyé par wiztricks Voir le message
    C'est parce que vous espérez qu'on va l'écrire à votre place
    Ah ça je suis d'accord. Mais si tu regardes bien, tu verras qu'il a quand-même été écrit à sa place (enfin quasiment quoi)...
    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]

  18. #18
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 688
    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 688
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Vas-y, viens me dire qu'il suffit de remplacer instructionX par if not done: instructionX juste pour me faire rire...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if ... :
     
    elif... :
     
    else:
    Avec un peu d'effort, on peut toujours se débrouiller...

    Mais les contraintes d'un exercice où on essaie de nous faire transpirer pour qu'on sorte de certaines facilités ne s'appliquent pas au programmeur qui va essayer d'utiliser toutes les fonctionnalités d'un langage pour écrire son code.

    C'est ce qui fait aussi qu'on peut proposer une solution qui fonctionne mais qui ne respectant pas ces contraintes (qu'on ignore) pourra être fausse car on attendait autre chose.

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

  19. #19
    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 finalement problème résolu.
    Citation Envoyé par Sve@r Voir le message
    Vas-y, viens me dire qu'il suffit de remplacer instructionX par if not done: instructionX juste pour me faire rire...


    Ah ça je suis d'accord. Mais si tu regardes bien, tu verras qu'il a quand-même été écrit à sa place (enfin quasiment quoi)...
    bonjour,
    Merci bien pour votre aide et vos conseils finalement je résolu cet exercice avec la fonction While,
    voila le code qui j'écris:
    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
    a = int(input())
    b = int(input())
    c = 0
    c +=a
    print(c)
    while True :
        c = (a + c) % 100
        if c != b and c != a:
         print(c)
     
        elif c == b:
            print("Cible atteinte")
            break
        elif c == a  :
            print("Pas trouvé")
            break
    merci bien à vous.

  20. #20
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 813
    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 813
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par hkrimi Voir le message
    bonjour,
    Nan c'est bon, une fois suffit...

    Citation Envoyé par hkrimi Voir le message
    finalement je résolu cet exercice avec la fonction While,
    Mouais. Toutefois ce n'est pas une fonction, c'est une instruction...

    Citation Envoyé par hkrimi Voir le message
    voila le code qui j'écris:
    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
    a = int(input())
    b = int(input())
    c = 0
    c +=a
    print(c)
    while True :
        c = (a + c) % 100
        if c != b and c != a:
         print(c)
     
        elif c == b:
            print("Cible atteinte")
            break
        elif c == a  :
            print("Pas trouvé")
            break
    Mouais. Je ne vois pas trop pourquoi le c=0 puis c+=a. Autant écrire alors c=a directement mais c'est inutile vu que c'est aussi fait dans la boucle. Et tous ces tests que tu fais à répétition => on dirait que tu mélanges tout ce qui a été dit alors que justement il a été donné certaines orientations vers une façon de faire et certaines vers une autre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    a = int(input())
    b = int(input())
    c = 0
    while True:
    	c = (a + c) % 100
    	print(c)
     
    	if c == b:
    		print("Cible atteinte")
    		break
    	if c == a:
    		print("Pas trouvé")
    		break
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    a = int(input())
    b = int(input())
    c = 0
    while c != a and c != b:				# On peut aussi écrire while c not in (a, b) si tu as appris les tuples et ses implications...
    	print(c)
    	c = (a + c) % 100
     
    if c == b:
    	print("Cible atteinte")
    else:
    	print("Pas trouvé")

    Citation Envoyé par hkrimi Voir le message
    merci bien à vous.
    Bonne chance...
    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]

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