2

Python で基本的な決定マトリックスを実装するためのクリーンなソリューションを見つけようとしています。インストールを監視する 8 つのセンサーがあり、これらの 8 つのセンサーの状態に基づいて、いくつかのリレーをアクティブにする必要があります。

私の決定マトリックスは次のようになります (S はセンサー、R は R):

S1   S2   S3   S4   S5   S6   S7   S8   R1   R2   R3
0    1    0    0    1    1    0    1    0    0    1
1    0    1    0    0    1    1    0    1    1    1
0    1    1    1    0    0    0    1    0    1    0
...

現在、私が目にする唯一の実装は、次のような決定行列の各行の if/elif ステートメントのスイートです。

if S1==0 and S2==1 and S3==0 and S4==0 and S5==1 and S6==1 and S7==0 and S8==1:
    relay_state('R1', 0)
    relay_state('R2', 0)
    relay_state('R3', 1)
elif ...

これは間違いなく機能しますが、これを実装するためのよりクリーンな方法があるのだろうか?

4

2 に答える 2

8

タプルの辞書を使用できます

matrix = {
   (0,1,0,0,1,1,0,1):(0,0,1),
   (1,0,1,0,0,1,1,0):(1,1,1),
   (0,1,1,1,0,0,0,1):(0,1,0),

}
S1,S2,S3,S4,S5,S6,S7,S8 = 0,1,0,0,1,1,0,1
R1,R2,R3=matrix[S1,S2,S3,S4,S5,S6,S7,S8]
print (R1,R2,R3)

$python test.py
(0, 0, 1)
于 2013-11-11T09:45:08.627 に答える
1

リストと比較リストを使用します。

if sensors == [0,1,0,1, ....]:

さらに効率的な表記 - ハンドラーが関数の場合、辞書を使用できます

decision_matrix = { (0,1,1,... ): some_handler, ... }
...
decision_matrix[sensors]()
于 2013-11-11T09:44:30.147 に答える