3

私のスクリプトは C プログラム digitemp を実行します。出力は、センサー ID と温度を含む行です。センサーIDを特定の名前と一致させる必要があるため、すべてのelif. この例では、ID を計算するための名前として、1 番目、2 番目、3 番目を使用しました。追加する必要があるため、すべての elif ステートメントを減らす方法はありますか?

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()
4

3 に答える 3

4

ディクショナリを使用して、センサー ID から人間が判読できる名前にマッピングします。

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

このアプローチの利点はget、人間が読める名前が割り当てられていない場合、メソッドが ID を変更せずに返すことです。

于 2013-04-14T19:46:08.187 に答える
0

ループ内のロジックのほとんどは、ジェネレーター式を使用して記述できます。これは同等のコードであり、コメント内の @DSM のアドバイスを考慮しています。

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
于 2013-04-14T19:56:06.647 に答える
-2

残念ながら、Python にはこれを行う方法がありません。C++ を使用している場合は、switch ステートメントを使用できますが、Python にはそのような同等のものはありません。ごめん!

于 2013-04-14T19:47:39.500 に答える