← Все вопросы

Почему функция возвращает значение после первой итерации цикла, а не после полного перебора?

Задан 2 месяца назад4 просмотров1 ответ
0

def has_even(numbers): for num in numbers: if num % 2 == 0: return True else: return False

print(has_even([1, 2, 3])) # False — хотя 2 есть print(has_even([1, 3, 5])) # False print(has_even([2, 4, 6])) # True Почему для списка [1, 2, 3] возвращается False? Как правильно переписать, чтобы функция искала по всему списку?

1 ответ

0

баг в else: return False. он срабатывает уже на ПЕРВОМ нечётном элементе, и функция сразу выходит, не досмотрев остальные. has_even([1, 2, 3]): первый — 1, нечётный → сразу return False, до двойки дело не дошло.

идея правильная — вернуть True, как только нашёл чётное. а False надо возвращать ТОЛЬКО когда весь цикл прошёл и ничего не нашлось, то есть ПОСЛЕ цикла, а не в else:

def has_even(numbers):
    for num in numbers:
        if num % 2 == 0:
            return True
    return False   # сюда дойдём, только если ни одного чётного не было

короче: return True внутри по условию, return False — за циклом. то же самое одной строкой: return any(n % 2 == 0 for n in numbers)

Ваш ответ

, чтобы ответить на вопрос.