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 combinée à if


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Professeur de guitare
    Inscrit en
    Mai 2017
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur de guitare

    Informations forums :
    Inscription : Mai 2017
    Messages : 61
    Points : 34
    Points
    34
    Par défaut La boucle while combinée à if
    Bonjour, je suis débutant et tente de me faire des mini programmes pour comprendre , m'améliorer :
    Je voudrais mieux comprendre comment et pourquoi utiliser cette boucle while.

    Ici j'ai volontairement voulu éviter la boucle for
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    x=67
    while x >= 67 and x <= 128:
        if x%4==0:
             print(x)
    Pourquoi rien ne s'affiche, pas de message d'erreur ? Problème de bloc et sous bloc ?


    D'incrémentation ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    x=67
    while x >= 67 and x <= 128:
        if x%4==0:
             print(x)
             x=x+1
    Merci de éclairages

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 788
    Points : 446
    Points
    446
    Par défaut
    Bonjour, dans les 2 cas pour la même raison, x ne change pas de valeur :
    dans le premier code, il n'est tout simplement pas modifier donc x= 67 , ce qui n'est pas multiple de 4 donc rien ne s'affiche.
    Au passage, c'est jolie boucle infinie


    Dans le second code, tu modifies x seulement lorsque sa valeur est multiple de 4; ce qui n'est pas le cas de 67.
    Attention au indentations; elles changent tout en python
    Évidemment, boucle infinie également
    Le savoir est une arme alors soyons armés

  3. #3
    Membre expérimenté

    Homme Profil pro
    linux, pascal, HTML
    Inscrit en
    Mars 2002
    Messages
    649
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : linux, pascal, HTML
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 649
    Points : 1 493
    Points
    1 493
    Billets dans le blog
    1
    Par défaut
    Attention à l'indentation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    x=67
    while x >= 67 and x <= 128:
        if x%4==0:
             print(x)
        x=x+1
    variante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    x=67
    while x >= 67 and x <= 128:
        if x%4==0:
             print(x)
        x+=1

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Pour bien comprendre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    x=67
    while x >= 67 and x <= 128:
        print("x : ", x, end = " ; ")
        if x%4==0:
             print("-> divisible par 4 ; ")
        x=x+1
    Pas d'aide par mp.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Professeur de guitare
    Inscrit en
    Mai 2017
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur de guitare

    Informations forums :
    Inscription : Mai 2017
    Messages : 61
    Points : 34
    Points
    34
    Par défaut
    Ce qui n'est pas clair c'est cette histoire de bloc qui vient s'aligner sous la condition if .

    En fait, si j'ai bien saisi, cela consiste à reprendre la variable x une fois qu'un bloc s'est appliqué sur x ?

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Sans cette ligne, x reste toujours à sa valeur initiale, il n'y a pas de raison que x soit modifié.
    Pour l'indentation, c'est un bon tuto qu'il faut prendre.
    Pas d'aide par mp.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Professeur de guitare
    Inscrit en
    Mai 2017
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur de guitare

    Informations forums :
    Inscription : Mai 2017
    Messages : 61
    Points : 34
    Points
    34
    Par défaut
    Du coup j'essaie de créer une autre boucle while pour tenter d'obtenir le même résultat qu'avec la boucle for:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    x=o
    for x in range (0:50):
        if x%2==0
            print(x)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    x=0
    while x%2==0:
        if x >=0 and x <=50:
            print(x)
    x=x+1
    Pourquoi ça m'affiche des zéros alors que j'incrémente ma variable ?

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Il vous faut vraiment un tuto : vouis ne pourrez pas progresser sinon !
    Il y a une faute à chaque ligne, votre code ne focntionne pas du tout.
    Voici une correction, après à vous d'y mettre du vôtre en suivant pas à pas une progression.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    x=0 # !!!!!!!!!!!!!
    for x in range (0,50): # !!!!!!!!!!
        if x%2==0: # !!!!!!!!!!!!!!!!!!
            print(x, end = " ; ")
     
    print()
    x=0
    while x < 50 : # !!!!!!!!!!!!!!!!
        if x%2 == 0: # !!!!!!!!!!!!!!!
            print(x, end = " - ")
        x=x+1 # !!!!!!!!!!!
    N.B. Il y a une commande magique, c'est "print(vos_variables)" : vous la placez à chaque ligne de boucle et comprendrez mieux ce qui se passe.
    Pas d'aide par mp.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Professeur de guitare
    Inscrit en
    Mai 2017
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur de guitare

    Informations forums :
    Inscription : Mai 2017
    Messages : 61
    Points : 34
    Points
    34
    Par défaut
    Je suis justement sur un tuto (python pour les kids)
    Quelles sont mes fautes ? Quelles sont les incohérences ?

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Vous savez lire ? Vous avez vu mes points d'exclamation ? Cela devrait vous aiguiller...
    Un bon tuto sinon :
    https://python.developpez.com/cours/TutoSwinnen/
    Désolé d'être un peu sec mais votre code avec la boucle for n'a aucune chance de fonctionner :
    "o" à la place de "0", ":" dans le range à la place de ",", pas de ":" à la fin de la ligne du "if".
    Essayez d'être plus rigoureux dans les copier-coller.
    Pas d'aide par mp.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Professeur de guitare
    Inscrit en
    Mai 2017
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur de guitare

    Informations forums :
    Inscription : Mai 2017
    Messages : 61
    Points : 34
    Points
    34
    Par défaut
    Ok j'ai repéré mes fautes sur la boucle for. En fait celle que j'ai écrite sur mon IDE était elle correcte.

    Ensuite je ne vois pas les incohérences de ma boucle while malgré vos points d'exclamation. Merci de vos éclairages.

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par calixtus06 Voir le message
    Ensuite je ne vois pas les incohérences de ma boucle while malgré vos points d'exclamation. Merci de vos éclairages.
    Il vous suffit de relire ce que vous avez écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    x=0
    while x%2==0:
        if x >=0 and x <=50:
            print(x)
    x=x+1
    en essayant de vous mettre à la place de l'interpréteur Python.
    • ligne 0: on assigne 0 à la variable x
    • ligne 1: tant que x est divisible par 2 exécuter:
    • ligne3 et 4: si x est plus grand que... afficher x
    • ligne 5: on incrémente x après la sortie du bloc while.

    Comme "x" est incrémenté en dehors du block de la boucle, x ne changera pas et la condition de sortie de la boucle ne sera jamais vraie.
    Au début apprendre à programmer, c'est arriver à comprendre ce que fera l'interpréteur Python des instructions que vous lui demandez d'exécuter. Et dans le cas particulier de Python, comprendre la structure de "block d'instructions" (qui est déjà expliquée dans votre tuto.).


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

  13. #13
    Membre émérite

    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
    Points : 2 328
    Points
    2 328
    Par défaut
    Il vous faut revoir l'indentation en python. Faites des recherches sur la toile et lisez attentivement ce que vous trouverez; car la plupart de vos questions viennent de problème d'indentation. En python il n'y a pas de délimiteurs de bloc (comme des parenthèses ou des accolades), à la place tout est géré par l'indentation !

    Ensuite si vous savez faire un exo avec un boucle for, alors vous savez le faire avec un while. Car un for ce n'est ni plus ni moins qu'un while avec initialisation automatique de l'indice de boucle (souvent nommé i) et incrément automatique à la fin de chaque itération.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in range(10,20):
        print(i)
    est équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    i=10
    while 10 <= i < 20 :
        print(i)
        i = i+1   #### Cette instruction est DANS le bloc while

  14. #14
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 969
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 969
    Points : 3 375
    Points
    3 375
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while True: 
        ...
        if <cond>: 
            break
    Si la réponse vous a aidé, pensez à cliquer sur +1

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Boucle While et fonction Require combinées
    Par Oliix dans le forum Langage
    Réponses: 14
    Dernier message: 30/05/2013, 09h43
  2. multiples array dans un, combiner avec boucle while
    Par leymiris dans le forum Langage
    Réponses: 2
    Dernier message: 27/07/2010, 16h19
  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