Python. Не могу понять логику в блоке с операторами if и for

Всем привет! Встала задачка: на входе список чисел, функция возвращает True, если массив содержит в любом месте две тройки подряд, иначе возвращает False.

Сейчас код возвращает True только когда две тройки стоят в начале списка. Я так понимаю, при соблюдении первого условия возвращается True, а то, что в последующих циклах for условие не соблюдается, ему уже не важно?

def func(a): 
    for n in range(0,len(a)-1):
        if a[n+1] == 3 and a[n] == 3:
            return True
        else:
            return False

Также я поигрался с отступами и случайно подобрал правильно работающий код:

def func(a): 
    for n in range(0,len(a)-1):
        if a[n] == 3 and a[n+1] == 3:
            return True
    else:
        return False

Не могу понять, почему он работает. Как мне казалось, else должен принадлежать циклам if и while. А сейчас, получается, он находится вне условия if - тогда к какому условию относится это else?


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

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

У вас возникает такая проблема из-за того, что при первой же неудачной проверке вы завершаете выполнение функции оператором return.

def func(a):
    for n in range(0,len(a)-1):
        if a[n+1] == 3 and a[n] == 3:
            return True
    return False

print(func([3, 2, 1, 3, 3])) # True

При таком написании кода функция завершится либо после прохождения всего массива, либо после нахождения искомой пары чисел.

→ Ссылка