Почему при перестановки условий с операцией 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 шт):

Автор решения: Эникейщик

От перестановки меняется порядок выполнения.

  1. Случай while p < len(a) and a[p] >= x: На последней итерации p равно длине массива, поэтому условие p < len(a) не выполняется и цикл прекращается сразу. Условие a[p] >= x не проверяется!, потому что незачем, т.к. первое условие уже не выполнено (это называется "вычисления по короткой схеме").

  2. Случай while a[p] >= x and p < len(a): На последней итерации p равно длине массива, поэтому попытка обратиться к a[p] вызывает исключение IndexError, т.к. такого элемента нет, ведь у самого последнего элемента индекс p-1 (т.е. len(a)-1)

→ Ссылка