#python #conditional-statements
#python #условные операторы
Вопрос:
Я решал небольшую алгоритмическую задачу. Есть два массива, arr1 и arr2. arr1 содержит несколько случайных целых чисел, а arr2 содержит целые числа, которые случайным образом содержат индексы arr1. Я смог решить проблему, но между ними я получил ошибку, которая является центральной темой этого вопроса. Итак, я не буду вдаваться в подробности об объяснении исходной проблемы, но попытаюсь объяснить это на другом примере.
Предположим, у меня есть два массива:
arr1 = [1]
arr2 = []
Если я использую print((arr1[arr2[-1]] < arr1[0]) or (not arr2))
, я получу, IndexError
поскольку arr2
пусто, и вызов arr2[-1]
вызовет эту ошибку.
Но, если я использую print((not arr2) or (arr1[arr2[-1]] < arr1[0]))
, я получаю вывод как True
. Ну, это то, что я на самом деле хотел, но я не могу понять, как замена условий вокруг or
оператора изменила результат?
Комментарии:
1.
or
and
короткие замыкания. Как и в случае, если первое условие вor
оценивается как истинное, оно не будет проверять другое. И если первое условие является ложным дляand
, оно не будет проверять остальные2.
and
иor
всегда ведут себя разумно. Если первое условие равно false (вand
) или true (вor
), результат известен, поэтому второе условие никогда не будет оценено и вычислено.3. @hansolo, значит ли это, что при наличии нескольких операторов «или», где бы оно ни было истинным, оно останавливает дальнейшую оценку и возвращает True ? И это происходит слева направо?
4. Да, и то же самое для,
and
если он получаетfalse
.5. Да, и да. В этом случае оценка выполняется слева направо