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 :

Optimisation if,elif,elif,elif, etc. [Python 3.X]


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 67
    Points : 61
    Points
    61
    Par défaut Optimisation if,elif,elif,elif, etc.
    Bonsoir à tous,
    Dans un programme que je réalise, j'utilise ce bloc de conditions :
    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
     
        if calcul<1:
            solde=0
            print('noir')
        elif calcul<2:
            solde=solde+50*l
            print('bleu')
        elif calcul<3:
            solde=solde+100*l
            print('rouge')
        elif calcul<4:
            solde=solde+150*l
            print('orange')
        elif calcul<5:
            solde=solde+200*l
            print('jaune')
        elif calcul<6:
            break
            print('rose')
        elif calcul<7:
            solde=solde+250*l
            print('bleu2')
        elif calcul<8:
            solde=solde+300*l
            print('rouge2')
        elif calcul<9:
            solde=solde+350*l
            print('orange2')
        elif calcul<10:
            solde=solde+400*l
            print('jaune2')
        else:
            solde=solde+500*l
            print('rose2')
    En résumé, j'ai toute une série de 'elif', et ce n'est pas très optimisé. J'aimerais réduire cela, j'ai donc créé un script pour faire mes essais :

    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
     
    from random import*
     
    def Realize():
        calcul = randint(0,10)+0.5
        if calcul<1:
            solde=0
        elif calcul<2:
            solde=1
        elif calcul<3:
            solde=2
        else:
            solde=3
        print(solde)
     
    Realize()
    Et après avoir consulté plusieurs aides ( comme http://stackoverflow.com/questions/1...he-else-is-don ), j'ai essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    def Optimize():
        calcul=randint(0,3)
        options = {'solde=1': 1, 'solde=2': 2, 'solde=3': 3}
        for k in range(0,3):
            if calcul==k in options:
                print(options{k})
     
    Optimize()
    Mais cela ne fonctionne pas. J'aimerais savoir quoi utiliser ou quoi faire pour optimiser mon bloc de conditions

    Merci de m'avoir lu.

  2. #2
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    perso je ferais un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    couleur = { 0: 'noir',   1: 'bleu',   2: 'rouge',   3: 'orange',   4: 'jaune',   5: 'rose',
                6: 'bleu2',  7: 'rouge2', 8: 'orange2', 9: 'jaune2',  10: 'rose2' }
     
    if calcul == 6:  # ici on traite le cas spécial
       break
    else:  # sinon globalement on effectue toujours la même opération
       solde = solde + (calcul if calcul < 10 else 10) * 50 * l
    print couleur[(calcul if calcul < 10 else 10)]  # à la fin on affiche, quoiqu'il arrive
    à valider

  3. #3
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Citation Envoyé par BufferBob Voir le message

    perso je ferais un truc comme ça : ...
    Perso, enfin, à la place du PO, j'étudierais les dictionnaires !

    A l'évidence, c'est une notion encore floue (voire ...) et même si il y a de la "recherche", les solutions trouvées ne sont pas comprises et vont conduire, je le crains, à du grand n'importe quoi. Les clés du dictionnaire, même si elles sont valides (des chaines), ne sont pas adaptées au problème et me laissent craindre le pire ... le PO espère-t-il une affectation "à un moment donné" ?
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 67
    Points : 61
    Points
    61
    Par défaut
    Merci pour vos réponses
    Euh ... PO ?

  5. #5
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par Leododo Voir le message
    Euh ... PO ?
    "Posteur Originel" (c'est toi ) celui qui est à l'origine du premier "post" sur le "thread"

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 67
    Points : 61
    Points
    61
    Par défaut
    D'accord .

    On a modifié mon message, j'avais inclus un lien expliquant les dictionnaires en python. Je me suis mis dessus pour résoudre mon pb.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Python 2.X] PB script if elif else
    Par Falmar dans le forum Général Python
    Réponses: 4
    Dernier message: 13/05/2015, 14h40
  2. [Débutant] Optimisations, cache, etc..
    Par Faiche dans le forum Hibernate
    Réponses: 1
    Dernier message: 12/02/2008, 17h25
  3. Documentation gratuite sur l'API Windows, COM, DCOM, OLE, etc.
    Par Community Management dans le forum Windows
    Réponses: 1
    Dernier message: 16/11/2006, 15h28
  4. Optimisation BDD Index etc..
    Par mediateur59 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 20/10/2006, 11h23
  5. [Choix] SGDB pour Entreprise : coût, efficacité, etc.
    Par grassat dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 15/06/2002, 08h52

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