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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Mars 2004
    Messages
    1 931
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 931
    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 063
    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 063
    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 931
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 931
    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 063
    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 063
    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 931
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 931
    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.

Discussions similaires

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

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