Python циклы с операторами break/continue

Дан набор из N вещественных чисел numbers = [10.10, 6.4, 7.3, 2.2, 1.1, 0, 5.5, -2.3]. Если каждый второй элемент с начала набора образует убывающую последовательность, то вывести 0; в противном случае вывести номер первого числа, нарушающего закономерность. Моя попытка, но у меня выводит 0 в любом случае и также я не знаю как вывести номер первого числа, нарушающего закономерность в else

numbers = [10.10, 6.4, 7.3, 2.2, 1.1, 0, 5.5, -2.3]
i = 1
while i < len(numbers) - 1:
    if all(numbers[i+1] <= numbers[i] for i in range(0, len(numbers), 2)):
        print(0)
        break
    i += 2
else:
    print()

Ответы (1 шт):

Автор решения: passant

Если вы ничего не переврали в задании - т.е. вывести надо именно номер, а не индекс; проверять надо каждый второй элемент, а не начиная с второго; что надо найти все такие последовательности и пр. усложнения - то все просто, например:

indx=0
for i in range(1,len(numbers)-1,2):
    try: 
        if numbers[i+2] > numbers[i]:
            indx=i+3
            break
    except:
        pass          
print(indx)

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

lng =len(numbers)-1 if len(numbers)%2==0 else len(numbers)-2 
indx=0
for i in range(1,lng,2): 
    if numbers[i+2] > numbers[i]:
        indx=i+3
        break        
print(indx)

Причем и try и предварительная проверка тут вставлены только потому, что-бы отследить ситуации четного или нечетного количества элементов во входном списке. Если у вас известно, что в этом списке может быть только четное число элементов (как обычно поступают в школьных заданиях - хотя это и неправильно, и надо себя с самого начала думать о всех возможных ситуациях) - то код упрощается еще сильнее, практически до

indx=0
for i in range(1,len(numbers)-1,2): 
    if numbers[i+2] > numbers[i]:
        indx=i+3
        break        
print(indx)
→ Ссылка