Почему при перестановки условий с операцией and, код некорректен
Простите возможно глупый вопрос, но почему если поменять условие p < len(a) и a[p] >= x местами то код будет выдавать ошибку. Ведь посути же от перестановки ничего поменяется
a = [int(i) for i in input().split()]
x = int(input())
p = 0
while p < len(a) and a[p] >= x:
p += 1
print(p + 1)
Ответы (1 шт):
От перестановки меняется порядок выполнения.
Случай
while p < len(a) and a[p] >= x:На последней итерацииpравно длине массива, поэтому условиеp < len(a)не выполняется и цикл прекращается сразу. Условиеa[p] >= xне проверяется!, потому что незачем, т.к. первое условие уже не выполнено (это называется "вычисления по короткой схеме").Случай
while a[p] >= x and p < len(a):На последней итерацииpравно длине массива, поэтому попытка обратиться кa[p]вызывает исключениеIndexError, т.к. такого элемента нет, ведь у самого последнего элемента индексp-1(т.е.len(a)-1)