3 votes

Comment réduire les instructions elif

Mon script exécute le programme C digitemp. La sortie se présente sous forme de lignes contenant l'identifiant du capteur et la température. J'ai besoin de faire correspondre l'ID du capteur avec un nom particulier donc tous les elifs. J'ai utilisé premier, deuxième, troisième dans cet exemple comme noms pour associer les ID. Existe-t-il un moyen de réduire toutes les instructions elif car il y en a d'autres à ajouter ?

import os

# get digitemps output
cmd = "/bin/digitemp_ -c /bin/digitemp.conf -q -a"

def digitemps():
    for outline in os.popen(cmd).readlines():
        outline = outline[:-1].split()
        if outline[0] == '28F4F525030000D1':
            temp_ = outline[1]
            print 'first ' + temp_
        elif outline[0] == '28622A260300006B':
            temp_ = outline[1]
            print 'second ' + temp_
        elif outline[0] == '28622A2603000080':
            temp_ = outline[1]
            print 'third ' + temp_

digitemps()

4voto

Tamás Points 18211

Utilisez un dictionnaire pour faire correspondre l'ID du capteur à un nom lisible par l'homme :

id_to_name = {"28F4F525030000D1": "first",
              "28622A260300006B": "second",
              "28622A2603000080", "third"}
print id_to_name.get(outline[0], outline[0]) + outline[1]

L'avantage de cette approche est que le get retournera l'identifiant sans le modifier si aucun nom lisible par l'homme ne lui a été attribué.

0voto

Óscar López Points 97105

La plupart de la logique à l'intérieur de la boucle peut être écrite en utilisant des expressions de générateur, ce code est équivalent et prend en compte les conseils de @DSM dans les commentaires :

d = {'28F4F525030000D1':'first ',
     '28622A260300006B':'second ',
     '28622A2603000080':'third '}

def digitemps():
  for s in (d.get(x[0],x[0]) + x[1] for x in (e.split() for e in os.popen(cmd))):
    print s

-2voto

kirbyfan64sos Points 1656

Malheureusement, Python n'a aucun moyen de le faire. Si vous utilisiez C++, vous auriez pu utiliser l'instruction switch, mais Python n'a pas cet équivalent. Désolé !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X