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 :

Programme loto améliorable ?


Sujet :

Python

  1. #1
    Membre éprouvé
    Inscrit en
    Mars 2004
    Messages
    1 937
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 937
    Par défaut Programme loto améliorable ?
    Bonjour,

    je viens de faire un programme de lot qui demande à l'utilisateur de saisir 7 chiffres et le programme qui génère 7 numéros au hasard. Ensuite je fais une comparaison et j'indique quel sont les bons numéros choisis par l'utilisateur.
    Mon programme fonctionne bien, mais comme c'est un de mes premiers programmes, j'aimerais corriger mes défauts dès le début, donc vos critiques ou propositions d'améliorations sont les bienvenues

    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
    71
    72
    73
    74
     
    # -*-coding:utf-8 -*
     
    import random
     
    # programme de loto
     
    # nbrrange = random.randrange(1, 49) # cherche un nomble aléatoire entre 1 et 49
     
    # focntion d'erreur
     
    def erreur(nbr):
        global err
        err = 0
        if nbr < 1:
            print("le nombre doit être compris en 1 et 49")
        elif nbr > 49:
            print("le nombre doit être compris en 1 et 49")
        elif type(nbr) != int:
            print("le nombre doit être un entier")
        elif nbr in lsaisie:
            print("Vous avez déjà saisi ce chiffre")
        else:
            err = 1 # si err à la valeur 1, cela signifie qu'il n'y a pas d'erreur
     
     
    i = 0
     
    j = 1
     
    l = []
    lsaisie = []
    ltrouve = []
     
     
     
    # on génère les numéros de loto via un random
     
    while i < 7:
        nbrint = random.randint(1, 49)
        if nbrint in l:
           continue
        else:
            l.append(nbrint)
            i = i + 1
     
    # on demande la saisie des numéros du loto
    while j < 8:
        nbr = int(input("entrez les 7 numéros de lotos compris entre 1 et 49\n"))
        erreur(nbr)
        if err == 1:
            j = j + 1
            lsaisie.append(nbr)
        else:
            continue
     
    # on va maintenant comparer les deux listes pour voir quels numéros ont été trouvés
     
    for num in lsaisie:
        l.count(num)
        if l.count(num) != 0:
            ltrouve.append(num)
     
    # on teste si la liste des numero trouvés contient au moins un nuémro
     
    if ltrouve:
        print("les numéros du loto sont",l)
        print("vous avez trouvés les numéros suivants : ",ltrouve)
    else:
        print("vous n'avez trouvé aucun numéro")
        print("les numéros du loto sont",l)
     
     
    input("")

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 754
    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 754
    Par défaut
    1. Virer le mot clé global
    2. Factoriser les redondances
    3. Utiliser try-except ValueError plutôt que la comparaison de type (ou à la rigueur utiliser isinstance à la place de type)
    4. Raccourcir le code en réfléchissant à nouveau au problème (au pire le code doit faire 10 lignes)
    5. Éviter les boucles while et modifier pour des boucles for
    6. Trop de listes vides inutiles, tuent les listes vides
    7. Créer des fonctions pour montrer différentes étapes de résolution (quoique ici ce n'est pas particulièrement utile)


    Voici en gros divers conseils plus ou moins urgents à régler, ce n'est pas dans l'ordre d'importance (sauf le 1.)

    Conseil: Si on met des commentaires, c'est que généralement on trouve son code pas particulièrement facile à lire. Il vaut donc mieux essayer de le rendre lisible par le code, que par les commentaires inscrits.

    Bon courage,

  3. #3
    Membre éprouvé
    Inscrit en
    Mars 2004
    Messages
    1 937
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 937
    Par défaut
    Salut, bon ok pour le 1). Mais j'avoue que pour le reste c'est un petit peu vague. Je pensais que mon code était court... Donc ça veut dire que je peux faire lus court ? Je vais travailler la-dessus.
    Autre chose, comme tu peux le voir, j'ai utiliser une fonction pour gérer les erreurs : Est-ce une bonne idée de tout mettre dans une seule et même fonction ?

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 754
    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 754
    Par défaut
    Est-ce une bonne idée de tout mettre dans une seule et même fonction ?
    Une fonction doit avoir une seule tâche ! On l'utilise lorsqu'on fait des actions répétitives...

    Mais j'avoue que pour le reste c'est un petit peu vague.
    Qu'est-ce qui est vague ?

    EDIT: Par contre je ne corrigerai pas ton code, à toi de chercher et le modifier afin qu'on puisse te guider vers la bonne solution. Sur ce forum il y a déjà des pavés de code qui ressemblent à ce que tu souhaites. J'en ai particulièrement écrit il y a quelques jours allant dans le même sens que ta fonction erreur.

  5. #5
    Membre éprouvé
    Inscrit en
    Mars 2004
    Messages
    1 937
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 937
    Par défaut
    Attention, je ne demande pas une correction car mon code fonctionne. Je demande effectivement comment l'améliorer. je vais parcourir le forum pour avoir des idées. Merci.

  6. #6
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Salut !

    Saisir les numéros un à un est trop chiant à faire, tu peux déjà améliorer ça en demandant directement en une fois les 7 numéros à saisir.
    Plutôt qu'utiliser une boucle pour générer le tirage du loto, tu peux te servir de random.sample, indice : cette fonction peut accepter un générateur comme 1er paramètre.
    Au lieu de liste, tu peux utiliser des sets pour les numéros du tirages et les numéros choisis par l'utilisateur et ainsi obtenir facilement les numéros communs.

  7. #7
    Membre éprouvé
    Inscrit en
    Mars 2004
    Messages
    1 937
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 937
    Par défaut
    Ha oui. Là ça devient beaucoup plus clair. Effectivement, les numéros à saisir à chaque fois, c'est un peu chiant.
    Donc ça je vais le changer. random.sample, je ne connaissais pas. Du coup, je vais me pencher la dessus.
    Les sets, je ne connais pas. Je vais regarder ce que c'est.
    Si tu ne me fais pas de remarque sur ma gestion des messages d'erreur ça veut que tu es ok ? Car j'ai effectivement testé le code fred1599 qui est très compact mais qui n'affiche aucun message d'erreur

  8. #8
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 754
    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 754
    Par défaut
    Citation Envoyé par sam01 Voir le message
    Car j'ai effectivement testé le code fred1599 qui est très compact mais qui n'affiche aucun message d'erreur
    Si tu souhaites absolument afficher un message d'erreur, il suffit d'ajouter un print("...") entre ligne 4 et 5

    Mais je pense que,
    Entrer une valeur entre {mini} et {maxi}: "

    me semble compréhensible à l'utilisateur, non ?

  9. #9
    Membre éprouvé
    Inscrit en
    Mars 2004
    Messages
    1 937
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 937
    Par défaut
    Citation Envoyé par bistouille Voir le message
    Salut !

    Saisir les numéros un à un est trop chiant à faire, tu peux déjà améliorer ça en demandant directement en une fois les 7 numéros à saisir.
    Plutôt qu'utiliser une boucle pour générer le tirage du loto, tu peux te servir de random.sample, indice : cette fonction peut accepter un générateur comme 1er paramètre.
    Au lieu de liste, tu peux utiliser des sets pour les numéros du tirages et les numéros choisis par l'utilisateur et ainsi obtenir facilement les numéros communs.
    Salut Bistouille,

    alors voilà j'ai finalisé mon programme personnel de loto et je l'ai modifié en suivant tes conseils et voilà ce que ça donne, il n'est pas super compact, mais il fonctionne :

    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
    71
    72
    73
    74
    75
    76
    77
    78
     
    # -*-coding:utf-8 -*
     
    import random
     
    # programme de loto
     
    # nbrrange = random.randrange(1, 49) # cherche un nomble aléatoire entre 1 et 49
     
    # fonction d'erreur
     
    err1 = 1
     
    def erreur(nbr):
        global err1
        if  nbr < 1:
            print("le nombre doit être compris en 1 et 49, vous avez saisi ", nbr)
            err1 = 0
        elif nbr > 49:
            print("le nombre doit être compris en 1 et 49, vous avez saisi ", nbr)
            err1 = 0
        elif type(nbr) != int:
            print("le nombre doit être un entier, vous avez saisi ", nbr)
            err1 = 0
     
    # on génère automatiquement les numéros du loto
     
    ran = range(1,49)
     
    loto = random.sample(ran,7)
     
     
    # on transforme la list en set
     
    setloto = set(loto)
     
     
    loto_saisi = input("entrez 7 chiffres compris entre 1 et 49 séparés par un espace : \n")
     
    # TRANSFORMATION DE STRING EN LIST
     
    listloto_saisi = loto_saisi.split()
     
    listloto_saisi_int = []
     
    for numran in listloto_saisi:
        num = int(numran)
        listloto_saisi_int.append(num)
     
    # on vérifie si les numéros saisis respectent bien les consignes
     
    err2 = 1
    if len(listloto_saisi_int) > 7:
        print("vous avez sais trop de chiffres")
        err2 = 0
    elif len(listloto_saisi_int) < 7:
        print("vous n'avez pas saisi 7 chiffres")
        err2 = 0
    elif len(set(listloto_saisi_int)) != len(listloto_saisi_int):
        print("vous avez saisi des doublons")
        err2 = 0
     
    for nbr_saisi in listloto_saisi_int:
        erreur(nbr_saisi)
     
     
    if err1 == 1 and err2 == 1:
        setlistloto_saisi_int = set(listloto_saisi_int)
     
        corresp = (setloto & setlistloto_saisi_int)
     
        if corresp:
            print("vous avez trouvé les numéros suivants : ", corresp, "\nLes numéros du loto sont : ", loto)
        else:
            print("vous n'avez trouvé aucun numéro,\n les numéros du loto sont : ", loto)
     
     
    input("")
    Je ne suis pas certain que le passage en set soit super utile. Ca m'a obligé à passer par un split et une modification des éléments qui comportait des quottes.
    En tous cas, je m'en suis servi pour gérer les éventuels doublons.

  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
    Vous pouvez tenter de bosser sur le code ci-dessous

    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
    71
    72
    73
    74
    75
    76
    77
    import random
     
    # programme de loto
     
    # nbrrange = random.randrange(1, 49) # cherche un nomble aléatoire entre 1 et 49
     
     
    # fonction d'erreur
    def erreur(nbr):
        err1 = 0
        if  nbr < 1 or nbr > 49 :
            print("le nombre doit être compris en 1 et 49, vous avez saisi ", nbr)
            err1 = 1
        return err1
     
    def verif_saisie_7_elements_distincts(listloto_saisi):
        err2 = 0
        if len(listloto_saisi) > 7:
            print("vous avez saisi trop de chiffres")
            err2 = 1
        elif len(listloto_saisi) < 7:
            print("vous n'avez pas saisi 7 chiffres")
            err2 = 1
        elif len(set(listloto_saisi)) != len(listloto_saisi):
            print("vous avez saisi des doublons")
            err2 = 1
        return err2
     
     
    def traitement_de_la_chaine_saisie(loto_saisi):
        listloto_saisi = loto_saisi.split()
        err = 0
        for i in range(len(listloto_saisi)) : 
            try :
                listloto_saisi[i]=int(listloto_saisi[i])
            except :
                print("le nombre doit être un entier, vous avez saisi ", listloto_saisi[i])
                err = 1
        if err == 0 :
            err = verif_saisie_7_elements_distincts(listloto_saisi)
        if err == 0 :
            err_indiv = [ erreur(nbr) for nbr in listloto_saisi ]
            if 1 in err_indiv :
                err = 1 
        return listloto_saisi,err
     
    # on génère automatiquement les numéros du loto
     
    ran = range(1,49)
     
    loto = random.sample(ran,7)
     
     
    # on transforme la list en set
     
    setloto = set(loto)
     
    loto_saisi = input("entrez 7 chiffres compris entre 1 et 49 séparés par un espace : \n")
     
    # TRANSFORMATION DE STRING EN LIST
    # ET VERIFICATION DE LA BONNE SAISIE SELON LES REGLES
     
    listloto_saisi,err=traitement_de_la_chaine_saisie(loto_saisi)
     
     
    if err == 0 :
        setlistloto_saisi = set(listloto_saisi)
     
        corresp = (setloto & setlistloto_saisi)
     
        if corresp:
            print("vous avez trouvé les numéros suivants : ", corresp, "\nLes numéros du loto sont : ", loto)
        else:
            print("vous n'avez trouvé aucun numéro,\n les numéros du loto sont : ", loto)
     
     
    input("")
    qui est une correction de ce que vous avez proposez qui à priori reste dans vos cordes.
    Notez que :
    1) Si on détecte qu'on n'a pas un entier (le joueur à écrit 'toto' par exemple), rien ne sert d'aller plus loin, car si ensuite vous tester si 'toto' est compris entre 1 et 49, le programme va crasher. Ca serait le comportement normal mais à priori vous voulez éviter.
    2) Il est de coutume de mettre erreur à 0 si tout c'est bien passé (et non pas à 1). Un nombre différent de 0 est une erreur donc, et peut être un code même (1 vas dire que c'ets une erreur d'un tel type, 2 d'un autre type, etc ..., ce que je n'ai pas fais ici d'ailleurs)
    3) J'ai mis des fonctions pour gérer vos erreurs
    4) On bannit le mot global. C'est sans doute le point e plus important. On fait retourner des valeurs par les fonctions, et on les récupère là où on en a besoin

    Si vous ne comprenez pas dites le, car à priori c'est de votre niveau (à part peut etre le try/except mais je pense que c'est assez explicite)

  11. #11
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par sam01 Voir le message
    Salut Bistouille,


    Citation Envoyé par sam01 Voir le message
    alors voilà j'ai finalisé mon programme personnel de loto et je l'ai modifié en suivant tes conseils et voilà ce que ça donne, il n'est pas super compact, mais il fonctionne
    Ton code est un peu brouillon.
    Le point d'arrêt du range est non inclus, donc c'est à 50 et non 49 qu'il faut le définir.

    L'ordre chronologique de ton code est inversé, tu dois d'abord opérer sur l'obtention et vérification des numéros utilisateur avant d'effectuer le tirage, ici, c'est sans conséquence, car le tirage est une opération très légère, mais c'est quand même une bonne habitude à prendre de respecter l'ordre des actions à faire dans ton code, on ne met pas la charrue avant les boeufs

    Citation Envoyé par sam01 Voir le message
    Je ne suis pas certain que le passage en set soit super utile. Ca m'a obligé à passer par un split et une modification des éléments qui comportait des quottes.
    C'est un choix comme un autre.
    Je n'ai pas compris ton histoire de quotes, et que ce soit list ou set, c'est du pareil au même, et pour ma part je n'affiche que ce qui a été contrôlé, donc je n'afficherais pas la saisie utilisateur comme ça, je pars du principe qu'un utilisateur est vicieux et cherchera toujours une faille

    Bon sinon, pareil que lg_53 pour le global.

    Et voilà comment j'aurais utilisé les sets :

    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
    import random
     
    while True :
        saisie = input('Saisissez 7 numéros entre 1 et 49 :\n')
        nums = set(int(n) for n in saisie.split() if n.isdigit())
     
        if len(nums) != 7 or min(nums) < 1 or max(nums) > 49 :
            print('oups, vous avez saisi de mauvaises valeurs !')
            continue
        break
     
    tirage = set(random.sample(range(1, 50), 7))
    bonsNumeros = nums & tirage
    print('Le tirage est : {}'.format(', '.join(str(n) for n in tirage)))
     
    if bonsNumeros :
        print('Bravo, vous avez {} bon(s) numéro(s) ({}) :-)'.format(
            len(bonsNumeros),
            ', '.join(str(n) for n in bonsNumeros)
            )
        )
    else :
        print('Vous n\'avez pas trouvé de bons numéros :-(')
    Bon, y'a pas de messages pour chaque type d'erreurs, et l'utilisateur peut entrer n'importe quoi en plus tant qu'il entre bien 7 numéros valides, je prends que ce qui m'intéresse ^^

    Puis, ce genre de programme simple, on peut le faire de tellement de façons différentes.

  12. #12
    Membre éprouvé
    Inscrit en
    Mars 2004
    Messages
    1 937
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 937
    Par défaut
    Salut Bistouille, merci pour ton exemple. C'est sur, je me rends compte qu'il y a plein de façon de coder.
    Pour t'expliquer mon problème avec le split, exécute le code suivant et tu comprendras ce que je veux dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    import random
     
    saisie = input('Saisissez 7 numéros entre 1 et 49 :\n')
    nums = set((saisie.split())
    print(nums)
    avec cette technique, je me suis retrouvé avec des chiffres entre quottes. Et pour la comparaison avec des chiffres sans quottes (venant du random) ça ne fonctionnait pas. Il a fallu que je trouve une astuce pour m'en débarrasser et c'est pour cal que j'ai utilisé la méthode replace.

    Dans ton code, je t'avoue que j'ai un peu de mal à comprendre cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    set(int(n) for n in saisie.split() if n.isdigit())
    En attendant, je vais étudier l'exemple de lg_53 que je remercie au passage et essayer de le comprendre.

  13. #13
    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
    '5' est une chaine de caractère
    5 est un entier
    Comparer 5 à '5' est un échec. Il faut soit convertir tes nombres en chaines (avec str) et comparer les chaines, soit convertir les chaines en entier (avec int) et comparer les entiers.
    Et la fonction split te donne bien une liste de chaine de caractère, donc tu dois faire une conversion.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x=set(int(n) for n in saisie.split() if n.isdigit())
    est la contraction de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    x=set()
    for n in saisie.split() :
         if n.isdigit():  ## isdigit est une fonction python qui teste si une chaine de caractere est composee entierement de chiffre
              x.add(n)
    Ceci utilise le principe de construction par compréhension.

    NB : Pour faire la conversion directement sur la liste, on aurait pu aussi utiliser la fonction map qui fonctionne comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x=['1','2','3']
    y=map(int,x)
    print(y) ### [1,2,3]

  14. #14
    Membre éprouvé
    Inscrit en
    Mars 2004
    Messages
    1 937
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 937
    Par défaut
    Ha oui, là je comprends mieux. Je ne connaissais pas cette méthode programmation mais là ça dépasse mes compétences. Je suis à mes débuts. Lorsque je serais plus à l'aise en Python, j'utiliserais certainement cette méthode.
    C'est justement la partie que je ne comprenais pas dans ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     err_indiv = [ erreur(nbr) for nbr in listloto_saisi ]
    donc si j'ai bien compris ça équivaut à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    for nbr in listloto_saisi:
        erreur(nbr)
    Merci.

  15. #15
    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 sam01 Voir le message
    Ha oui, là je comprends mieux. Je ne connaissais pas cette méthode programmation mais là ça dépasse mes compétences. Je suis à mes débuts. Lorsque je serais plus à l'aise en Python, j'utiliserais certainement cette méthode.
    C'est justement la partie que je ne comprenais pas dans ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     err_indiv = [ erreur(nbr) for nbr in listloto_saisi ]
    donc si j'ai bien compris ça équivaut à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    for nbr in listloto_saisi:
        erreur(nbr)
    Merci.
    Presque.

    Ca équivaut à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    err_indiv = []
    for nbr in listloto_saisi:
        err_indiv.append(erreur(nbr))
    La différence c'est que dans ce que tu proposes tu ne fais qu'appeler la fonction erreur, sans retenir les résultats qu'elles produit. Ici la liste err_indiv, construite maillon par maillon, garde une trace des résulttas successifs retourné par les appels à la fonction erreur.

Discussions similaires

  1. Réponses: 29
    Dernier message: 27/08/2015, 10h38
  2. Programme d'amélioration Plugin
    Par bamby44 dans le forum Eclipse Platform
    Réponses: 3
    Dernier message: 15/07/2009, 16h21
  3. programme code cesar amélioré.
    Par m-laure dans le forum C
    Réponses: 4
    Dernier message: 01/04/2007, 16h45
  4. [Tableaux] Améliorer ma façon de programmer
    Par Invité dans le forum Langage
    Réponses: 11
    Dernier message: 28/11/2006, 18h56
  5. Réponses: 2
    Dernier message: 06/05/2006, 16h09

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