Как использовать оператор 'and', только если для переменной задано значение "True" - PullRequest
1 голос
/ 20 июня 2020

Как использовать оператор and, только если use_ivr = True?

ivr = 30
use_ivr = True

if 1 == 1 and 2 == 2 and ivr > 30:
    print('yes')

Итак, если use_ivr = False, он должен выполняться следующим образом:

if 1 == 1 and 2 == 2:
    print('yes')

Ответы [ 4 ]

1 голос
/ 21 июня 2020

Вы можете использовать метод all():

ivr = 30
use_ivr = True

if all([1 == 1, 2 == 2, ivr > 30, use_ivr]):
    print('yes')

if all([1 == 1, 2 == 2, not use_ivr]):
    print('yes')

all() возвращает True, если все элементы в итерируемом

, переданные в скобки, истинны (или, если итерация пуста), иначе возвращается False.

ОБНОВЛЕНИЕ:

Хотя мой первый код работает нормально, он оценивает 1 == 1, 2 == 2 дважды. Вот обновленная версия:

ivr = 30
use_ivr = True

a = [1 == 1, 2 == 2, ivr > 30, use_ivr]

if all(a):
    print('yes')

if all(a[:2]+[not use_ivr]):
    print('yes')
1 голос
/ 20 июня 2020

В python 2-я часть and выполняется только тогда, когда 1-я часть истинна. Вы можете проверить это с неопределенным проверяемым

>>> if False and x # <- here x is undefined
        pass
#This won't raise an error since 1st part is False and it slipped the 2nd part of the expression.

. Вам нужно проверить ivr>30 только тогда, когда use_ivr равно True. Примерно так же, как индикаторные переменные используются для обнуления условия.

if ((use_ivr and ivr > 30) or True) and 1 == 1 and 2 == 2:
    print('yes')

Здесь, если use_ivr равно True, то ivr должно быть больше 30 Или True означает пропустить эту проверку полностью. use_ivr - это False.

0 голосов
/ 20 июня 2020

На практике это похоже на многие из приведенных выше ответов.

ivr = 31
use_ivr = True
ivr_condition = ivr > 30 if use_ivr else True

if (1==1) and (2==2) and ivr_condition:
  print('yes')

В этом решении используется сжатие условия ivr в один троичный оператор. Вы можете встроить этот подход, чтобы иметь одну более длинную строку, хотя я лично обнаружил, что одну длинную строку труднее разбирать.

0 голосов
/ 20 июня 2020

Используйте вложенный оператор if, который проверяет истинность use_ivr:

ivr = 31
use_ivr = True

if use_ivr:
    if 1 == 1 and 2 == 2 and ivr > 30:
        print('yes')
else:
    if 1 == 1 and 2 == 2:
        print('no ivr was used');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...