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 :

Python 3.5 Exercice sur Boucle conditionnelle While.


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 42
    Points : 30
    Points
    30
    Par défaut Python 3.5 Exercice sur Boucle conditionnelle While.
    Bonjour,

    Depuis déjà quelques semaines, j'avais fort envie de maîtriser un langage de programmation afin de parfaire en parallèle mon sens logique.

    Or, je me rend compte que j'ai encore énormément à apprendre, puisque j'ai amorcé la lecture du tuto intitulé "Apprendre Python 3.5" et en page 51 de ce même tuto, il existe exercice que je ne maîtrise pas et sur lequel je bute depuis vendredi dernier.

    Cet exercice contenu dans le chapitre "Répétition en boucle : l'instruction While" demande ceci, je cite :

    Écrivez un programme qui affiche une suite de 12 nombres dont chaque terme soit égal au triple du terme précédent.

    j'ai donc amorcé le code par :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    a, b, c = 1, 1, 1 
    while b < 13:
        print (b, end=" ")
        a, b, c = b, a*3, c+1

    cela me donne :
    1 3 3 9

    Je suis conscient que je suis complètement à l'ouest de la solution. Je ne sais pas comment raisonner pour y parvenir.

    Veuillez, me commenter chaque ligne de vos solutions respectives.

    merci à vous

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 604
    Points : 56 721
    Points
    56 721
    Billets dans le blog
    40
    Par défaut
    Bonsoir,

    cela pourrait donner quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    a,c = 1,1
    while c<=12 :   
        print (a ,end=' ')
        a,c = a*3, c+1
    Bonne continuation dans votre apprentissage

  3. #3
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    C'est typiquement le genre de chose que l'on teste dans l'interpréteur interactif.

    Tu ouvres une console, tu tapes python3 et tu testes tes codes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Python 3.2.3 (default, Feb 27 2014, 21:33:50) 
    [GCC 4.6.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> num = 1
    >>> l = []
    >>> while len(l) < 12:
    ...     l.append(num)
    ...     num *= 3
    ... 
    >>> l
    [1, 3, 9, 27, 81, 243, 729, 2187, 6561, 19683, 59049, 177147]
    >>>

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 42
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par f-leb Voir le message
    Bonsoir,

    cela pourrait donner quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    a,c = 1,1
    while c<=12 :   
        print (a ,end=' ')
        a,c = a*3, c+1
    Bonne continuation dans votre apprentissage
    Encore merci f-leb pour l'encouragement, je pense en avoir besoin encore quelques temps

    Quant à la seconde solution de vinsS (que je remercie autant ), encore complexe à mes yeux, j'aimerai qu'il me commente brièvement les différentes lignes de code ayant abouti à ce résultat.

    Bonne journée à vous !

  5. #5
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Rien de très ésotérique là-dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    >>> num = 1                 # notre nombre de base
    >>> l = []                  # on crée une liste vide
    >>> while len(l) < 12:      # tant que la liste ne compte pas douze nombres ...
    ...     l.append(num)       # on ajoute le nombre à la liste
    ...     num *= 3            # on multiplie le nombre par 3 (équivalent syntaxique de num = num * 3
    ... 
    >>> l                       # équivalent de print(l)

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    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 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Bouom771 Voir le message
    Écrivez un programme qui affiche une suite de 12 nombres dont chaque terme soit égal au triple du terme précédent.

    j'ai donc amorcé le code par :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    a, b, c = 1, 1, 1 
    while b < 13:
        print (b, end=" ")
        a, b, c = b, a*3, c+1

    cela me donne :
    1 3 3 9

    Je suis conscient que je suis complètement à l'ouest de la solution. Je ne sais pas comment raisonner pour y parvenir.
    Bonjour

    Plutôt que te donner la solution déjà amplement donnée d'ailleurs (quoique créer une liste juste pour l'afficher en final soit à mon avis un peu riche), je préfère t'expliquer en quoi ton raisonnement était à l'ouest (toutefois pas énormément)
    Tu es parti sur une boucle "tant que b inférieur à 13" ce qui était très bien pour avoir 12 nombres. Ceci dit, écrire while b <= 12 aurait montré un lien plus direct avec l'énoncé (il faut savoir qu'un programme doit non seulement fonctionner mais aussi être rapidement compris par autrui => si l'énoncé mentionne "12" c'est bien alors que ton code mentionne lui aussi "12" et non "13"). Et si le "<=" te gêne (car plus long à évaluer en terme de microsecondes qu'un simple "<"), alors rien ne t'interdit de faire démarrer ton indice à 0 (après-tout, le vrai point de départ de la numération c'est "0" et non "1") et écrire alors while b < 12 (b variera de 0 à 11 inclus mais cela fera quand-même 12 itérations !!!)

    Mais ensuite, tu places dans b la valeur de "a*3". C'est là que ça ne va plus. Si tu veux avoir 12 itérations, il te faut alors placer dans b la valeur de "b+1" pour que b passe à l'indice suivant. Et c'est "a", le nombre que tu affiches, qui doit lui être multiplié par 3 (et non recevoir la précédente valeur de b). Et quand à "c", lui, il évolue tout à fait comme il faut mais il n'est pas utilisé et donc je ne vois pas à quoi il te sert. A la limite tu aurais écrit while c <= 12 cela aurait été presque parfait.

    En fait, j'ai l'impression que tu ne savais pas qu'on pouvait écrire x=x ... c'est à dire écrire à droite de l'affectation une expression utilisant la variable que tu es en train de modifier et donc que tu as alors tenté de passer par une variable intermédiaire. Ben c'est inutile. Quand tu écris b=b+1, l'expression de droite est d'abord calculée en utilisant la valeur actuelle de "b" et son résultat final est alors recopié dans "b" qui perd alors sa valeur précédente (mais on s'en fout puisqu'on s'en est déjà servi).

    Bon bref la solution donnée par f-leb est satisfaisante. Une variable qui sert de limite de boucle et qui monte de 1 à 12 et une autre qui est là pour donner la valeur à afficher et qui est multipliée par 3 à chaque tour. Toutefois je n'aime pas trop cette écriture a,c=a*3,c+1. Je préfère la réserver (toujours question de lisibilité) à des variables qui sont associées de façon logique (si par exemple je dois gérer des coordonnées x,y là je grouperai mes coordonnées car on ne peut pas concevoir x sans y et inversement). Or ici, il n'y a pas de raison de lier "a" et "c". a est la valeur à afficher et c la valeur qui sert d'indice de boucle (ceci dit on a plutôt l'habitude de la nommer alors "i" comme "indice").
    Ainsi voici ce que j'aurais écrit
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    v=1           # "v" comme "valeur" (principale de l'algorithme)
    i=0            # "i" comme "indice" (de boucle)
    while i<12:   
        print (v ,end=' ')
        v*=3
        i+=1
    # while (j'aime bien montrer où se trouve la fin du bloc)
    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]

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignement
    Inscrit en
    Septembre 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 31
    Points : 0
    Points
    0
    Par défaut Simple
    Pourquoi compliquer la vie c'est simple:
    a=0
    While a<12:
    a=a+3
    peint(a)
    Ceci donne 3,6,9,12

  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
    Citation Envoyé par bouchelliga Voir le message
    Pourquoi compliquer la vie c'est simple:
    a=0
    While a<12:
    a=a+3
    peint(a)
    Ceci donne 3,6,9,12
    Encore faut-il comprendre correctement l'énoncé...
    Pas d'aide par mp.

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    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 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bouchelliga Voir le message
    Ceci donne 3,6,9,12
    Ben oui, mais c'est pas ce qu'on demande. Donc réveiller un topic vieux de 3 ans pour sortir ton inutilité n'était pas des plus approprié.
    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]

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignement
    Inscrit en
    Septembre 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 31
    Points : 0
    Points
    0
    Par défaut La solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def a(n):
        a=1
        for i in range(n):
            a=3*a
        return a
    for n in range(11):print(a(n)) ,

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    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 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bouchelliga Voir le message
    Pourquoi compliquer la vie c'est simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def a(n):
        a=1
        for i in range(n):
            a=3*a
        return a
    for n in range(11):print(a(n)) ,
    Mouais, super simple !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def a(n): return 3**n
    for n in range(11):print(a(n)) ,
    Sinon euh ça ne sert pas tellement de donner une solution sur un topic vieux de 3 ans (alors qu'il y en a déjà eu de données à l'époque). Ca fait bien longtemps que le PO est passé à autre chose...
    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]

  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 bouchelliga Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def a(n):
        a=1
        for i in range(n):
            a=3*a
        return a
    for n in range(11):print(a(n)) ,
    Si le résultat attendu est d'afficher 12 nombres et que çà n'en sort que 11...
    Ce n'est pas ce qui est attendu (et vous auriez du/pu vérifier cela par vous même avant de penser avoir trouvé).
    D'autre part, il y a plein de manières de coder pour obtenir un résultat.
    Ici, l'énoncé demande d'écrire çà avec une boucle "while" donc si on y trouve des fonctions, "range",... c'est que vous n'avez toujours pas compris l'énoncé ou plutôt pas encore assimilé que programmer demande une attention et une rigueur assez particulière.

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

Discussions similaires

  1. Condition sur boucle While
    Par Florian V dans le forum LabVIEW
    Réponses: 8
    Dernier message: 26/02/2010, 18h18
  2. aide pour exercice sur Les boucles
    Par hotdogFRANCE dans le forum C#
    Réponses: 3
    Dernier message: 13/03/2009, 08h43
  3. pb sur boucle conditionnelle
    Par oliver75 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/07/2007, 13h59
  4. [MySQL] Problème sur Boucle While après un LEFT JOIN
    Par matperino dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 28/05/2007, 17h43
  5. Réponses: 3
    Dernier message: 11/06/2006, 12h09

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