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 шт):
У вас возникает такая проблема из-за того, что при первой же неудачной проверке вы завершаете выполнение функции оператором 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
При таком написании кода функция завершится либо после прохождения всего массива, либо после нахождения искомой пары чисел.