2013-11-11 1 views
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 
... 

В настоящее время единственной реализацией, что я вижу, это набор а, если заявления/Элиф для каждой строки моей descision матрицы, как :

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 ... 

Это определенно будет работать, но мне интересно, есть ли более чистый способ реализовать это?

ответ

7

вы можете использовать словарь кортежа

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) 
+0

Это именно то, что я искал! благодаря – cgaspoz

1

Используйте список и сравнение списков:

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

Еще более эффективные нотации - если ваши обработчики функции, вы можете использовать словарь

decision_matrix = { (0,1,1,...): some_handler, ... } 
... 
decision_matrix[sensors]() 
+0

'if sensors = ...' -> 'if sensers == ...' –

+0

Это также хороший способ решения проблемы. Однако, в моем случае, с матрицей решений 8 !, я должен был бы определить 3! обработчики. При первом решении мне нужен только один, который получает три состояния реле. – cgaspoz