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 :

Simplification d'un if


Sujet :

Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 85
    Par défaut Simplification d'un if
    Bonjour je cherche a simplifier se code et que si je veux rajouter d'autre variable (qui peuvent êtres True ou False) ne soit pas compliquer :
    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
    def patch() : #patch bouton
        global resultat
        if hostuse =="True" :
            hostedit()
            if copyFuse =="True" :
                try: waiter.start()
                except:error('thread')
                try:copy.start()
                except: error('thread')
            elif copyFuse =="False" :
                print "False Copy"
        elif hostuse =="False" :
            if copyFuse =="True" :
                try: waiter.start()
                except:error('thread')
                try:copy.start()
                except: error('thread')
            elif copyFuse =="False" :
                print "False All"
                error('config')
        else : error('config')

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 99
    Par défaut
    Voici la première chose qui me viens a l'esprit :
    Code Python PEP008 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     - Compound statements (multiple statements on the same line) are
          generally discouraged.
    Yes:
              if foo == 'blah':
                  do_blah_thing()
              do_one()
              do_two()
              do_three()
     
    Definitely not:
              try: something()
              finally: cleanup()
    Le lien : http://www.python.org/dev/peps/pep-0008
    Ce que je veux dire, c'est qu'en premier lieu tu devrais aérer ton code, ca le rend plus lisible.

    Ensuite, je te conseil de spécifier le type d'exception que tu attends (redoutes ?) de tes fonctions. Au pire, utilises BaseException qui aura le mérite de ne pas bloquer les SystemExit ou les exception de mémoire.

    Pour ce qui est de la simplification de ton code, tu peux simplifier un peu ton code en faisant quelque chose comme :
    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
     
    global resultat
    if copyFuse:
        # Là tu as ton fonctionnement normal.
        try:
            waiter.start()
            copy.start()
        except UnNomDException, e:
            error('thread')
        return
     
    # Et la ton traitement d'erreur.
    if hostuse:
        print("False copy")
    else:
        print("False All")
        error('config')
    return
    C'est un peu plus clair - enfin a mon sens - mais ca ne doit pas vraiment remplir ton idée d'être modulaire pour de futurs changements de variables.

    Pour simplifier ton code, il faudrait qu'on connaisse un peu mieux les contraintes de tes variables. Parce que sans propriété particulières, y'a pas vraiment moyen de simplifier les choses de facon générique.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 85
    Par défaut
    Je vais essayer d'expliquer :
    ce 'def' est utiliser une fois qu'on clique sur un bouton il lance des thread selon des variables qui ne peuvent avoir comme valeur 'True' ou bien 'False'.
    -lorsque la variable est sous 'False': rien ne doit se passer.
    -lorsque la variable est sous 'True' : 2 Threads sont lancé.
    La gestion d'erreur (error(name)) et les prints ne sont pas important.

    Si on regarde le code il se répète énormément

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 99
    Par défaut
    Dans ce cas la il suffit "d'oublier" ta deuxieme variable, si elle ne sert a rien.
    Et donc ecrire juste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if copyFuse:
        try:
            waiter.start()
            copy.start()
        except UnNomDException, e:
            error('thread')
    else:
        error('config')
    D'après ce que tu me décris, tu n'as pas besoin de plus que ça.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 85
    Par défaut
    Voila ce que j'aimerai avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def patcher() : #patch bouton
        global resultat
        if hostuse =="True" :
            hostedit()
        elif copyFuse =="True" :
            try:
                waiter()
                copy()
            except: error('thread')
        else : error('config')
    probleme si il le premier est True il fait pas les autres.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 99
    Par défaut
    Change ton "elif copyFuse == 'True' " en un "if copyFuse == 'True'" simple et ca devrait aller comme tu veux.

    M'enfin à ce niveau je pense que tu vas pouvoir trouver tout seul.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 85
    Par défaut
    Oui effectivement c'était stupide dsl
    Merci quand même.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 99
    Par défaut
    Comme dit l'adage : "Il n'y a pas de question connes..."

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

Discussions similaires

  1. Evaluation/simplification d'expression arithmetique
    Par Premium dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 08/12/2005, 12h19
  2. Analyse de code HTML et simplification par l'XML
    Par Punky65250 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 10/11/2005, 10h24
  3. simplification d'un graphe
    Par arnobidul dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 22/09/2005, 18h44
  4. Simplification d'une requête UNION
    Par eautret dans le forum Langage SQL
    Réponses: 6
    Dernier message: 18/01/2005, 14h51
  5. [Kylix] Simplifications de l'écriture Kylix/Pascal"
    Par Mr Vincent KLEIN dans le forum EDI
    Réponses: 1
    Dernier message: 11/03/2003, 11h07

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