код, который будет истинным, только если 1 из 3 или 3 из трех верны - PullRequest
0 голосов
/ 20 сентября 2019

Должны ли вы делать, если заявления суммируют числа и только делают числа 1 и 3 верными или есть другой способ?

g= bool(a) != bool(b) != bool(c)

Ответы [ 3 ]

2 голосов
/ 20 сентября 2019

Попробуйте оператор xor: bool(a) ^ bool(b) ^ bool(c):

for a in [True, False]:
    for b in [True, False]:
        for c in [True, False]:
            print(a, b, c, ":", a ^ b ^ c)

, вывод:

True True True : True
True True False : False
True False True : False
True False False : True
False True True : False
False True False : True
False False True : True
False False False : False
1 голос
/ 20 сентября 2019

Вы также можете использовать sum здесь:

sum(a, b, c) in {0, 1, 3}

В качестве примера функции:

def check(*args):
    return sum(args) in {0, 1, len(args)}

for a in [True, False]:
    for b in [True, False]:
        for c in [True, False]:
            print(a, b, c, ":", check(a, b, c))

Какая печать:

True True True : True
True True False : False
True False True : False
True False False : True
False True True : False
False True False : True
False False True : True
False False False : True

Если вам нужночтобы убедиться, что аргументы обрабатываются как истинные значения, просто используйте удобную функцию карты денди:

return sum(map(bool, args)) in {0, 1, len(args)}
0 голосов
/ 20 сентября 2019

Булевы значения в python могут быть приведены к целым числам, а целые числа - к логическим значениям, так что вы можете сделать что-то вроде

finalVar = bool((int(var1)+int(var2)+int(var3)) % 2)

Добавить к этому из последнего комментария: «Если все 3 ложные, это должно быть верно"вы можете использовать троичный оператор, чтобы получить крайний случай, когда все равно 0:

temp = bool(int(var1)+int(var2)+int(var3))
finalVar = True if temp == 0 else temp % 2
...