У меня есть переменная, которую я хочу установить в зависимости от значений в трех булевых. Самый простой способ - это утверждение if, за которым следует серия elifs:
if a and b and c:
name = 'first'
elif a and b and not c:
name = 'second'
elif a and not b and c:
name = 'third'
elif a and not b and not c:
name = 'fourth'
elif not a and b and c:
name = 'fifth'
elif not a and b and not c:
name = 'sixth'
elif not a and not b and c:
name = 'seventh'
elif not a and not b and not c:
name = 'eighth'
Это немного неудобно, и мне интересно, есть ли более путинский способ справиться с этой проблемой. Несколько идей приходят на ум.
-
Словарь hack:
name = {a and b and c: 'first', a and b and not c: 'second', a and not b and c: 'third', a and not b and not c: 'fourth', not a and b and c: 'fifth', not a and b and not c: 'sixth', not a and not b and c: 'seventh', not a and not b and not c: 'eighth'}[True]
Я называю это взломом, потому что я не слишком одинок, когда семь из ключей являются False и переопределяют друг друга.
-
И/или магия
name = (a and b and c and 'first' or a and b and not c and 'second' or a and not b and c and 'third' or a and not b and not c and 'fourth' or not a and b and c and 'fifth' or not a and b and not c and 'sixth' or not a and not b and c and 'seventh' or not a and not b and not c and 'eighth')
Это работает, потому что Python ands и ors возвращают последнее значение, которое нужно оценить, но вы должны знать, что для понимания этого другого причудливого кода.
Ни один из этих трех вариантов не очень удовлетворителен. Что вы рекомендуете?