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 :

Comprendre l'instruction WHILE.


Sujet :

Python

  1. #1
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 144
    Points : 62
    Points
    62
    Par défaut Comprendre l'instruction WHILE.
    Bonjour
    j'apprend Python et a ce propos je suis le tutorial présent sur Developpez.com de Gérard Swinnen : Apprendre à programmer avec Python.

    Je suis dans le tuto a la boucle While donc au début mais je suis bloqué dans treois des exercices et je ne veux pas allé plus loin tant que je n'ai pas bien compris.

    Exercices :

    4.2. Écrivez un programme qui affiche les 20 premiers termes de la table de multiplication par 7.

    4.3. Écrivez un programme qui affiche une table de conversion de sommes d'argent exprimées en euros, en dollars canadiens. La progression des sommes de la table sera « géométrique »,
    comme dans l'exemple ci-dessous :
    1 euro(s) = 1.65 dollar(s)
    2 euro(s) = 3.30 dollar(s)
    4 euro(s) = 6.60 dollar(s)
    8 euro(s) = 13.20 dollar(s)
    etc. (S'arrêter à 16384 euros)

    4.4. Écrivez un programme qui affiche une suite de 12 nombres dont chaque terme soit égal au triple du terme précédent.
    Pour le dernier exercice le 4.4, j'ai essayé ce qui suit mais est ce que cela est vraiment correct?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> a, b, c = 3, 3, 3
    >>> while c  < 300000 :
    ...     print b,
    ...     a, b, c = b, a*b, c*3
    ...
    3 9 27 243 6561 1594323 10460353203 16677181699666569 174449211009120179071170507 2909321189362570808630465826492242446680483 507528786056415600719754159741696356908742250191663887263627442114881
    Est il possible que quelq'un m'explique les deux premiers exercices et m'indique si ce que j'ai fait pour le troisième et la bonne façon de procéder.

    Merci

  2. #2
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    i = 1
    while i < 3000:
        print i
        i *= 3

    Thierry

  3. #3
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 144
    Points : 62
    Points
    62
    Par défaut
    Merci,
    ton code n'affiche que 8 termes hors l'exercice en demande 12. En faisant des essais je m'aperçois qu' en augmentant le nombre de While le nombre de résultats change mais est ce vraiment cela?

    Par exemple avec ton code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    i = 1
    while i < 3000:
        print i
        i *= 3
    on obtient comme résultat : ...

    1 3 9 27 81 243 729 2187

    mais si je tape comme code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> i = 1
    >>> while i < 30000:
    ...     print i,
    ...     i *=3
    j'obtient :

    1 3 9 27 81 243 729 2187 6561 19683

    Autre chose le signe * après le i doit il être considéré comme le signe multiplier ou a-t-il une autre signification?

    Merci

  4. #4
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Je n'avais pas lu la donnée correctement!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    p = 1
    i = 0
    while i < 12:
        print p
        p *= 3
        i += 1
    ou plus pythonique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    p = 1
    for i in xrange(12):
        print p
        p *= 3
    Thierry

  5. #5
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 144
    Points : 62
    Points
    62
    Par défaut
    Merci beaucoup.

    Si qu'elqu'un peux m'expliquer pour les deux premiers exercices ce serait sympa.

    Merci encore

  6. #6
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par pcsystemd Voir le message
    Merci beaucoup.

    Si qu'elqu'un peux m'expliquer pour les deux premiers exercices ce serait sympa.

    Merci encore
    Pour le 1er exercice, il s'agit d'afficher la suite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    7 14 21 28 35 42 49 56 63 70 77 84 91 98 105 112 119 126 133 140
    Le 2ème exercice me paraît clair. Pour résoudre ces 2 exercices, il te faut également utiliser une boucle.

    Thierry

  7. #7
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 144
    Points : 62
    Points
    62
    Par défaut
    Pour le premier exercice voici ce que je fais avec while mais si je veux utiliser for?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >> i = 1;
    >>> while i < 20:
    ...     print (i*7),
    ...     i = i+1;
    ...
    7 14 21 28 35 42 49 56 63 70 77 84 91 98 105 112 119 126 133
    Pour le deuxième exercice voici ce que je fais mais cela ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> S = 16384
    >>> print ("1 euro = 1.65 dollar");somme = 0;
    1 euro = 1.65 dollar
    >>> i = 2;
    >>> while i < S:
    ...     somme = i*1.65;
    ...     i = i*2;
    ...     print (i+ "euro = "+ somme + "dollar");
    ...
    Traceback (most recent call last):
      File "<stdin>", line 4, in ?
    TypeError: unsupported operand type(s) for +: 'int' and 'str'
    Merci

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par pcsystemd Voir le message
    Pour le premier exercice voici ce que je fais avec while mais si je veux utiliser for?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >> i = 1;
    >>> while i < 20:
    ...     print (i*7),
    ...     i = i+1;
    ...
    7 14 21 28 35 42 49 56 63 70 77 84 91 98 105 112 119 126 133
    Je ne vois que 19 termes, pourtant :
    4.2. Écrivez un programme qui affiche les 20 premiers termes de la table de multiplication par 7.


    Avec le for ça donnerait quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in range(20):
    	print (i+1)*7
    Mais bon, le but du for est surtout parcourir des objets itérables je pense.


    Traceback (most recent call last):
    File "<stdin>", line 4, in ?
    TypeError: unsupported operand type(s) for +: 'int' and 'str'
    Ce message d'erreur signifie que tu essais de concaténer un entier avec une chaîne de caractères. C'est impossible. Il faut formater la chaîne de manière a ce que l'entier soit converti en entier au moment de l'affichage.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     print (i+ "euro = "+ somme + "dollar");
    devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print (i+ "euro = %i dollar" % somme)
    Le %i accueil un int, %f accueil un float, %s tous les types il me semble.

    ps : le point virgule n'est pas obligatoire en fin d'instruction

  9. #9
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 144
    Points : 62
    Points
    62
    Par défaut
    Merci beaucoup,

    j'essaie tous cela et je continue mon tuto. J'ai juste du mal a comprendre pourquoi on ajoute 1a i dans

    Bon j'ai teste mais toujours même erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> S = 16384
    >>> print ("1 euro = 1.65 dollar");somme = 0;
    1 euro = 1.65 dollar
    >>> i = 2;
    >>> while i < S:
    ...     somme = i*1.65;
    ...     i = i*2;
    ...     print (i+ "euro = %i dollar" % somme)
    ...
    Traceback (most recent call last):
      File "<stdin>", line 4, in ?
    TypeError: unsupported operand type(s) for +: 'int' and 'str'
    Merci

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    C'est ma faute, je n'ai pas fait attention au premier "i".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print (i+ "euro = "+ somme + "dollar");
    devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print ("%i euro = %i dollar" % (i,somme));
    bien sûr. As-tu compris ce que je t'ai dit sur ce style de formatage ? Car cette erreur ci tu aurais dû la trouver par toi-même après mon explication

    J'ai juste du mal a comprendre pourquoi on ajoute 1a i
    Déroulle le code ou essaies avec et sans le +1. Tu verras tout de suite pourquoi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in range(20):
    	print (i+1)*7
    donnera
    7
    14
    21
    28
    35
    42
    49
    56
    63
    70
    77
    84
    91
    98
    105
    112
    119
    126
    133
    140
    Tandis que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in range(20):
    	print i*7
    donnera :
    0
    7
    14
    21
    28
    35
    42
    49
    56
    63
    70
    77
    84
    91
    98
    105
    112
    119
    126
    133
    A moins que les multiplications par 0 t'intéressent tu ajoutes +1.


    Mais en réalité là encore je ne me suis pas appliqué. Ce code évite le +1 et produit le bon résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # Pour i de 1 à 21 exclu :
    for i in range(1,21):
     	print i*7

  11. #11
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 144
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    voila j'ai enfin trouve. Le bon code était :

    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
    >>> S = 16384
    >>> print ("1 euro = 1.65 dollar");somme = 0
    1 euro = 1.65 dollar
    >>> i = 2
    >>> while i < S:
    ...     somme = i*1.65;
    ...     i =i*2
    ...     print (i.__str__()+ "euro = %i dollar" % somme)
    ...
    4euro = 3 dollar
    8euro = 6 dollar
    16euro = 13 dollar
    32euro = 26 dollar
    64euro = 52 dollar
    128euro = 105 dollar
    256euro = 211 dollar
    512euro = 422 dollar
    1024euro = 844 dollar
    2048euro = 1689 dollar
    4096euro = 3379 dollar
    8192euro = 6758 dollar
    16384euro = 13516 dollar
    Merci a tous pour votre aide.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    Inutile d'appeler directement la méthode "i.__str__()", une fonction est associée :
    C'est une alternative au formatage. Mais mélanger les 2 (concaténation, formatage) sur une même ligne de code est plutôt étrange...
    Je me demande toujours
    As-tu compris ce que je t'ai dit sur ce style de formatage ?
    N'écris pas du code que tu ne comprends pas. Demande

  13. #13
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 144
    Points : 62
    Points
    62
    Par défaut
    Bonjour,
    le code que j'ai écris je le comprends tout simplement voyant que j'avais un souci de type, j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    >>> type(i)
    <type 'int'>
    >>> dir(i)
    ['__abs__', '__add__', '__and__', '__class__', '__cmp__', '__coerce__', '__delattr__', '__div__', '__divmod__', '__doc__', '__float__', '__floordiv__', '__getattribute__', '__getnewargs__', '__hash__', '__hex__', '__init__', '__int__', '__invert__', '__long__', '__lshift__', '__mod__', '__mul__', '__neg__', '__new__', '__nonzero__', '__oct__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdiv__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__str__', '__sub__', '__truediv__', '__xor__']
    >>> i.__str__()
    '4'
    >>> type(i.__str__())
    <type 'str'>
    ce que je ne savais pas c'est qu'il y avait la fonction str(i) qui existait.

    Merci

  14. #14
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 726
    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 726
    Points : 31 046
    Points
    31 046
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par pcsystemd Voir le message
    ce que je ne savais pas c'est qu'il y avait la fonction str(i) qui existait.
    Page 48 du livre de Swinnen...

Discussions similaires

  1. instruction while et tableau de valeurs
    Par Sh4dow49 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 16/07/2009, 15h32
  2. Instructions While / switch imbriquées
    Par countrycrisp dans le forum Débuter
    Réponses: 3
    Dernier message: 21/08/2008, 14h33
  3. Comprendre l'instruction do while
    Par romi36 dans le forum VBScript
    Réponses: 4
    Dernier message: 19/07/2007, 07h12
  4. Réponses: 1
    Dernier message: 19/03/2007, 22h15
  5. Réponses: 13
    Dernier message: 03/08/2006, 16h31

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