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 :

[ex.34] suite de l'aventure


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2011
    Messages : 65
    Par défaut [ex.34] suite de l'aventure
    Bon alors comme il me l'a été demandé ou suggéré ( je pense que le choix me revenais au final ) je crée un nouveau sujet pour soumettre mon travail face à la horde de professionnels que vous êtes.

    Comme cité dans mon précédent topic ( qui devrait continuer à être alimenté ?), je me suis remis au travail et me voila à l'exercice 34 ( comment ça je chôme ? Mais pas du tout ! ) dont voici le sujet :

    Écrire un programme qui, étant données deux bornes entières a et b, additionne les nombres multiples de 3 et de 5 compris entre ces bornes.
    avec tout de même un tout petit peu d'aisance ( il ne faut sans doute pas trop exagérer ) je suis parvenu à ceci :

    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
    23
    24
    25
    26
    # -*- coding: utf-8 -*-
    #Ce programme permet d'identifier tous les multiples de 3 et de 5 dans une
    # borne donnée par l'utilisateur.
    # il additionne ensuite ses valeurs et affiche le resultat a l'ecran
     
    minimum = int(raw_input("veuillez entrer une valeur minimal:"))
    maximum = int(raw_input("veuillez entrer une valeur maximal:"))
    a = minimum
    b = maximum
    compteur = 0
    liste = []
    index = 0
    m1 = 3
    m2 = 5
    resultat = 0
    while compteur < b:
        a = a + 1
        compteur = compteur + 1
        if a % m1 == 0 and a % m2 == 0:
            liste.append(a)
            index = index + 1
            resultat = resultat + a
            print("les valeurs situees entre", minimum, "et", maximum, "qui")
            print("sont a la fois multiples de 3 et de 5 sont les suivants:")
            print(liste, "la somme de ces elements est egale a :")
            print(resultat)
    Encore une fois, notons a quel point on se sent fière est satisfait lorsqu'on parvient à écrire un programme d'approximativement 30 lignes et qui fonctionne en plus !

    Un gros merci à vous de m'épaulez au travers de mon périple..Au passage, et vous l'aurez sans doute compris, je souhaiterais que vous commentiez mon code, faite ressortir les points qui pourraient être améliorés pour plus de clarté peut être ( et c'est la que je repense à cette phrase précieuse au début du bouquin, concernant l'importance des commentaires ) ou tout simplement autour de la démarche logique du problème.

  2. #2
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Pas mal de déclaration de variables dans tout cela.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    current = minimum = int(raw_input("veuillez entrer une valeur minimal: "))
    maximum = int(raw_input("veuillez entrer une valeur maximal: "))
    liste = []
    while current <= maximum:
        if current % 3 == 0 and current % 5 == 0:
            liste.append(current)
        current += 1
    print "les valeurs situees entre", minimum, "et", maximum, "qui"
    print "sont a la fois multiples de 3 et de 5 sont les suivants:"
    print liste
    print "la somme de ces elements est egale a :", sum(liste)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    current = minimum = int(raw_input("veuillez entrer une valeur minimal: "))
    maximum = int(raw_input("veuillez entrer une valeur maximal: "))
    somme = 0
    liste = []
    while current <= maximum:
        if current % 3 == 0 and current % 5 == 0:
            somme += current  # somme = somme + current
            liste.append(current)
        current += 1
    print "les valeurs situees entre", minimum, "et", maximum, "qui"
    print "sont a la fois multiples de 3 et de 5 sont les suivants:"
    print liste
    print "la somme de ces elements est egale a :", somme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    current = minimum = int(raw_input("veuillez entrer une valeur minimal: "))
    maximum = int(raw_input("veuillez entrer une valeur maximal: "))
    somme = 0
    liste = []
    while current <= maximum:
        if not current % 3  and not current % 5:
            somme += current  # somme = somme + current
            liste.append(current)
        current += 1
    print "les valeurs situees entre", minimum, "et", maximum, "qui"
    print "sont a la fois multiples de 3 et de 5 sont les suivants:"
    print liste
    print "la somme de ces elements est egale a :", somme
    @+

  3. #3
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Question: Puisque vous utilisez Python 2.x pourquoi n'utilisez vous pas input ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    current = minimum = input("veuillez entrer une valeur minimal: ")
    maximum = input("veuillez entrer une valeur maximal: ")
    somme = 0
    liste = []
    while current <= maximum:
        if not current % 3  and not current % 5:
            somme += current  # somme = somme + current
            liste.append(current)
        current += 1
    print "les valeurs situees entre", minimum, "et", maximum, "qui"
    print "sont a la fois multiples de 3 et de 5 sont les suivants:"
    print liste
    print "la somme de ces elements est egale a :", somme

  4. #4
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Comme je doute que not, a = b = c et += ne soit abordés dans votre tuto à ce niveau une version plus légère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    minimum = input("veuillez entrer une valeur minimal: ")
    maximum = input("veuillez entrer une valeur maximal: ")
    somme = 0
    liste = []
    current = minimun
    while current <= maximum:
        if current % 3 == 0 and current % 5 == 0:
            somme = somme + current
            liste.append(current)
        current = current + 1
    print "les valeurs situees entre", minimum, "et", maximum, "qui"
    print "sont a la fois multiples de 3 et de 5 sont les suivants:"
    print liste
    print "la somme de ces elements est egale a :", somme
    Comme vous le voyez pas besoin de multiplier les variables .

    Ceci dit votre code est 'juste'

  5. #5
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 049
    Par défaut
    Salut PauseKawa,

    Je suis pas totalement d'accord avec ta phrase

    Question: Puisque vous utilisez Python 2.x pourquoi n'utilisez vous pas input ?
    Dans la doc il est bien spécifié

    Citation Envoyé par doc officielle
    Consider using the raw_input() function for general input from users
    Mais aussi

    Citation Envoyé par "doc offcielle
    This function does not catch user errors
    Peut-être voulais-tu dire cela pour la version 3 python, et non la 2?

  6. #6
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour fred,

    Je suis bien d'accord avec This function does not catch user errors mais si l'on considère int(raw_input("veuillez entrer une valeur minimal: ")) c'est un moindre mal.
    Non, je ne parle pas de Python 3 puisque raw_input() n'existe plus.
    En fait puisque suppadrakn écrit int(raw_input()) c'est qu'il considère que l'utilisateur vas entrer un nombre. Dans le cas contraire nous savons tous ce qui vas se passer, y compris suppadrakn.
    Autant utiliser input plutôt qu'un int(raw_input()) assez 'moche'.
    Mais bon, j'aurais attendu une réflexion du PO

    En fait, vu que % semble acquis, la pédagogie de l'exercice (désolé si je me trompe mais aucune envie de regarder à quoi cela correspond) me semble porter sur and/or > les conditions multiples. Dans ce sens suppadrakn s'en ai bien tiré.

    @+

  7. #7
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 049
    Par défaut
    Je vois où tu veux en venir, mais input() j'aime pas, j'y peux rien, je ne trouve pas cela sécurisé du tout.

    input() étant l'équivalent de eval(raw_input()), ce n'est pas la même chose que int(raw_input()), avec eval on reconnaîtra un objet python.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> import os
    >>> commande = input("Entrer votre commande : ")
    Entrer votre commande : os.chdir("/home/fred1599")
    >>> os.getcwd()
    '/home/fred1599'
    Mais aussi le fait que l'utilisateur peut vouloir une chaîne de caractères même pour un nombre, il ne l'aura pas avec cette fonction, je t'apprend rien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> a = eval("5.0")
    >>> a
    5.0
    >>> type(a)
    <type 'float'>
    Maintenant sur cet exercice, certes c'est fonctionnel, mais est-ce un bon réflexe, je sais pas...

    Malgré des choses un peu plus technique dépassant le niveau actuel du PO, il aura bien le temps de revoir tout ça, et peut-être pas, avec python3

    En fait, vu que % semble acquis, la pédagogie de l'exercice (désolé si je me trompe mais aucune envie de regarder à quoi cela correspond) me semble porter sur and/or > les conditions multiples. Dans ce sens suppadrakn s'en ai bien tiré.
    +1

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2011
    Messages : 65
    Par défaut
    Première question ( oh l'inculte...) qu'entendez-vous par le PO ?

    Ensuite, je constate que mon code était effectivement perfectible et surtout il y avait moyen de l'écrire de manière bien plus simple

    Je note quand même que certains éléments composant votre code me sont encore inconnus ce qui m'entraîne à penser que je devrais au plus vite aller faire un tour vers l'index de la documentation python.

    D'un autre côté chaque chose en son temps, ma quête du savoir est encore bien loin d'être terminé.

    Ceci dit votre code est 'juste'

  9. #9
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 049
    Par défaut
    PO --> posteur originel

    Ensuite, je constate que mon code était effectivement perfectible et surtout il y avait moyen de l'écrire de manière bien plus simple
    Avec la pratique tout cela viendra, on est tous passé par là

    Je note quand même que certains éléments composant votre code me sont encore inconnus ce qui m'entraîne à penser que je devrais au plus vite aller faire un tour vers l'index de la documentation python.
    En effet on apprend bien plus vite en faisant ses recherches soi-même, je vous conseille la pratique de l'anglais car les documents français sont souvent traduits de la langue anglaise et certaines erreurs de traduction apparaissent.

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

    Citation Envoyé par suppadrakn Voir le message
    Ensuite, je constate que mon code était effectivement perfectible et surtout il y avait moyen de l'écrire de manière bien plus simple
    Si vous prenez compte de toutes les suggestions faites dans les forums vous n'y arriverez pas, conservez la forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    minimum = int(raw_input("veuillez entrer une valeur minimal:"))
    maximum = int(raw_input("veuillez entrer une valeur maximal:"))
    Elle fonctionne assez bien pour vos exercices. Et vous ne pourrez l'améliorer intelligemment qu'après avoir acquis le concept de fonction.
    Citation Envoyé par PauseKawa
    En fait puisque suppadrakn écrit int(raw_input()) c'est qu'il considère que l'utilisateur vas entrer un nombre. Dans le cas contraire nous savons tous ce qui vas se passer, y compris suppadrakn.
    Autant utiliser input plutôt qu'un int(raw_input()) assez 'moche'.
    La construction int(raw_input(prompt)) est moche mais "good enough" pour rappeler qu'on doit convertir la chaine de caractère lue en un entier.
    En remplaçant cela par "input", çà fera le job mais le résultat attendu sera masqué... et il va falloir ajouter des commentaires pour expliquer çà ;-)
    Remplacer cela par un ask_integer(prompt) et traiter les aspects de validation de la saisie dans cette fonction n'est pas encore à l'ordre du jour.
    Citation Envoyé par fred1599
    mais input() j'aime pas, j'y peux rien, je ne trouve pas cela sécurisé du tout.
    Si les effets de bords d'"input" vous tracassent, ast.literal_eval est pour vous.
    Mais la validation des données saisies est un vrai sujet. Il dépasse largement le cadre de l'exercice du PO et celui des recettes de cuisine qu'on aime ou pas.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Moi qui attendais une réflexion de la part de suppadrakn au sujet de input/raw_input...
    Tout ceci dépasse largement le cadre de l'exercice et mérite une petite explication/démonstration pour suppadrakn, ce qui ne se trouve pas dans le tuto.

    input:
    input 'interprète' ('évalue') ce qui est entré par l'utilisateur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> v = input()
    1
    >>> v
    1
    Le fait que cela soit interprété pose souci suivant ce que rentre l'utilisateur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> v = input()
    a
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<string>", line 1, in <module>
    NameError: name 'a' is not defined
    Ici l'entrée 'a' de l'utilisateur est recherchée dans les noms des objets Python ('évaluée').
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> a = 0
    >>> b = 1
    >>> v = input("Entrez a ou b ")
    Entrez a ou b b
    >>> v
    1
    Dans le cadre d'une chaîne de caractère il serait possible de demander à l'utilisateur de la spécifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> v = input("Entrez votre chaine entre guillemets ")
    Entrez votre chaine entre guillemets 'tutu'
    >>> v
    'tutu'
    Mais vous conviendrez que cela n'est pas très user friendly...

    raw_input:
    raw_input retourne une chaîne de caractère. A vous de vérifier si son contenu est valide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> v = raw_input()
    t
    >>> type(v)
    <type 'str'>
    >>> v
    't'
    int:
    Converti une chaîne de caractère ou un nombre en entier.

    La problématique ici c'est que int ne vas pas pouvoir convertir une entrée utilisateur non valide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> int('a')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: invalid literal for int() with base 10: 'a'
    >>> int(0.12)
    0
    De même que input
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> v = input()
    toto
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<string>", line 1, in <module>
    NameError: name 'toto' is not defined
    Pour cela il vas falloir passer par raw_input et contrôler l'entrée utilisateur.
    A ce niveau du tuto c'est possible mais délicat (il vas falloir revenir sur les chapitres précédents pour retrouver len, in et accessoirement not):
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    # -*- coding: utf-8 -*-
    # Ce programme permet d'identifier tous les multiples de 3 et de 5 dans une
    # borne donnée par l'utilisateur.
    # il additionne ensuite ses valeurs et affiche le resultat a l'ecran
     
    minimum = raw_input("veuillez entrer une valeur minimal: ")
    maximum = raw_input("veuillez entrer une valeur maximal: ")
     
    maxlen = len(maximum)  # La taille de la chaine de caractère. Attention avec l'index str[index].
    index = 0  # L'index d'une chaine de caratère commence à zéro.
    maxvalide = 1  # Voir maxvalide and minvalide plus bas.
    while index < maxlen:  # index < maxlen et non index <= maxlen car commence à zéro.
        # 'not' et 'in' sont dans le tuto mais passent inaperçus.
        # dommage, surtout pour in...
        if not maximum[index] in "0123456789":  # Le caractère maximum[index] est il ('in') dans "0123456789" ?
            maxvalide = 0  # Si c'est non ('not') l'entrée n'est pas valide > On passe maxvalide à zéro. 
        # Vous remarquerez l'utilité de 'not' au dessu:
        # if quelquechose:
        #     jenefaisrien
        # else:
        #     jefaisquelquechose
        # deviens
        # if not quelquechose:
        #     jefaisquelquechose
        # >>> a = 0
        # >>> if a != 0:
        # ...    a
        # ... else:
        # ...    print 'ok'
        # ... 
        # ok
        # >>> if not a:
        # ...    print 'ok'
        # ... 
        # ok
        index = index + 1  # 'break', permettant d'intérrompre le while, n'étant pas encore abordé on fini la boucle.
    # Re belote avec minimum. Vous conviendrez que c'est moche de se répéter.
    # La solution c'est le ask_integer(prompt) de wiztricks, une fonction.
    # Cela arrive plus loin dans le tuto.
    minlen = len(minimum)
    index = 0
    minvalide = 1
    while index < minlen:
        if not minimum[index] in "0123456789":
            minvalide = 0
        index = index + 1
     
    # Voir Contrôle du flux d'instructions + Principaux types de données
    if maxvalide and minvalide:  # if valeur != 0 est égal à if valeur.
        # Comme maxvalide et minvalide sont != 0 (== 1) la conversion int(valeur) est possible.
        current = minimum = int(minimum)  # Voir les affectations multiples au début du tuto.
        maximum = int(maximum)
        somme = 0
        liste = []
        while current <= maximum:
            if not current % 3 and not current % 5:  # current % x donne 0 ou 1. Si c'est 0 current % x == 0 reviens à not current % x
                somme = somme + current  # somme += current
                liste.append(current)
            current = current + 1  # current += 1
        print "les valeurs situées entre", minimum, "et", maximum, "qui"
        print "sont a la fois multiples de 3 et de 5 sont les suivants:"
        print liste
        print "la somme de ces elements est égale a :", somme
    else:
        print 'Entrées non conforme.'
        if not minvalide:
            print minimum, "n'est pas un nombre."
        if not maxvalide:
            print maximum, "n'est pas un nombre."
        print 'Abandon.'
    Mais cela n'était pas le sujet de l'exercice et la 'validation' sera grandement simplifiée avec la découverte des fonctions (ce qui éviteras les répétitions de codes).

    La polémique ici est de savoir qui du NameError (input) ou ValueError (int) est le plus acceptable.
    Ce que dit wiztricks, et qui n'est pas faux, c'est que le fait d'écrire int(raw_input()) permet lors de la lecture du code de savoir qu'un entier est demandé.
    Ce que je souligne c'est que la problématique de la conversion avec int vous étant déjà montée vous ne devriez pas prendre l'habitude d'utiliser ce genre de 'construction'.

    Pour ce qui est de l'exercice en lui même, et comme déjà dit, votre code n'est pas 'perfectible'. La différence entre (si ce n'est int(raw_input)/input)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    minimum = input("veuillez entrer une valeur minimal: ")
    maximum = input("veuillez entrer une valeur maximal: ")
    somme = 0
    liste = []
    current = minimun
    while current <= maximum:
        if current % 3 == 0 and current % 5 == 0:
            somme = somme + current
            liste.append(current)
        current = current + 1
    print "les valeurs situees entre", minimum, "et", maximum, "qui"
    print "sont a la fois multiples de 3 et de 5 sont les suivants:"
    print liste
    print "la somme de ces elements est egale a :", somme
    et
    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
    minimum = int(raw_input("veuillez entrer une valeur minimal:"))
    maximum = int(raw_input("veuillez entrer une valeur maximal:"))
    a = minimum
    b = maximum
    compteur = 0
    liste = []
    index = 0
    m1 = 3
    m2 = 5
    resultat = 0
    while compteur < b:
        a = a + 1
        compteur = compteur + 1
        if a % m1 == 0 and a % m2 == 0:
            liste.append(a)
            index = index + 1
            resultat = resultat + a
            print("les valeurs situees entre", minimum, "et", maximum, "qui")
            print("sont a la fois multiples de 3 et de 5 sont les suivants:")
            print(liste, "la somme de ces elements est egale a :")
            print(resultat)
    ne se trouve qu'ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    a = minimum
    b = maximum
    compteur = 0
    liste = []
    index = 0
    m1 = 3
    m2 = 5
    ce qui veux dire à presque rien puisque a = current et b n'est pas utilisé. m1 et m2 étant optionnels. Bon travail.

    @+

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

    Que d'énergie dépensée sur un tel sujet!

    Citation Envoyé par PauseKawa Voir le message
    Ce que dit wiztricks, et qui n'est pas faux, c'est que le fait d'écrire int(raw_input()) permet lors de la lecture du code de savoir qu'un entier est demandé.
    J'ai omis d'écrire que la forme x = int(raw_input()) avait aussi le mérite d'assurer que x sera un "int" pour les instructions suivantes. Sans cela nous aurions des erreurs bizarres par la suite (current % 3 == 0).

    Citation Envoyé par PauseKawa Voir le message
    Ce que je souligne c'est que la problématique de la conversion avec int vous étant déjà montrée vous ne devriez pas prendre l'habitude d'utiliser ce genre de 'construction'.
    Vous prendrez l'habitude d'écrire:
    minimum = ask_integer("veuillez entrer une valeur minimal: ")
    maximum = ask_integer("veuillez entrer une valeur maximal: ")
    i.e. créer une fonction ask_integer qui retournera un "int" ou une "exception". Cette description d'ask_integer déplacera le sujet sans pour autant interdire de la réaliser simplement via:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def ask_integer(prompt):
         return int(raw_input(prompt))
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def ask_integer(prompt):
         v = input(prompt)
         assert isinstance(v, int)
    i.e. à un moment donné il faudra bien s'assurer qu'on récupère bien un "int".
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  13. #13
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2011
    Messages : 65
    Par défaut
    Je vais être franc Kawa, je n'ai fais que survolé de manière très grossière ce que vous avez posté la...Non pas par paresse, mais par peur de me sentir larguer, dépasser, embrouiller. Je débute, et j'avoue, bêtement peut être, manqué encore cruellement de confiance en ce que je fais ( en quelque sorte ) alors je préfère me cantonner à ce que j'ai pu apprendre pour le moment de façon à assimiler une certaine base avant de pouvoir jongler aisément avec le reste.

    Sachez néanmoins que je considère vos réponses toujours aussi précieuses et je ne manquerais pas de reprendre ce fil de conversation lorsque le moment sera venu.

  14. #14
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Pas bien grave: C'est une réponse du dimanche.

    Par contre à l'occasion jetez un oeil à la validation de l'entrée utilisateur (A ce niveau du tuto c'est possible mais délicat (il vas falloir revenir sur les chapitres précédents pour retrouver len, in et accessoirement not)).
    Cela reprend in qui est important et qui n’apparais que très rapidement dans les chapitres précédents.

    Bon code et @+

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if maximum[index] not in "0123456789"

Discussions similaires

  1. reauete suite à une requete
    Par 74160 dans le forum Requêtes
    Réponses: 4
    Dernier message: 22/08/2003, 14h42
  2. [JSP][JDBC]1 seule connexion à la DB(suite)
    Par betherb dans le forum JDBC
    Réponses: 6
    Dernier message: 14/08/2003, 10h02
  3. Migration Access > SQL Server (suite) : Compteur
    Par LadyArwen dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/03/2003, 14h08
  4. Réponses: 2
    Dernier message: 04/03/2003, 23h24
  5. Pb BDE suite a passage en Windows 2000 pro
    Par ARIF dans le forum Paradox
    Réponses: 4
    Dernier message: 18/11/2002, 11h39

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