DamiRocK

Python: ранний return из цикла при поиске символа @

Завершаем функцию сразу после первого совпадения. Проверяем пустую строку, отсутствие символа и отличие такой проверки от валидации email.

Поиск может закончиться раньше обхода

Для ответа «есть ли совпадение» достаточно первого найденного символа. Return внутри цикла завершает не только цикл, но и весь текущий вызов функции. Если совпадений не оказалось, отрицательный ответ возвращается после завершения обхода.

Задание источника

Проверьте наличие символа @ в переданной строке:

def has_at_symbol(email: str) -> bool:
    index = 0
    while index < len(email):
        if email[index] == "@":
            return True
        index += 1
    return False

Три сценария

Для "support@example.com" функция найдёт символ внутри строки и вернёт True. Для "wrong-email" просмотрит все позиции и вернёт False. Для "@admin" завершится уже на первой итерации с True.

Пустая строка не проходит условие цикла ни разу и даёт False. Если символов @ несколько, результат не меняется: задача проверяет наличие, а не считает количество.

Где должен находиться False

Возвращать False внутри цикла после первого несовпавшего символа нельзя. Строка, начинающаяся обычной буквой и содержащая @ дальше, тогда была бы ошибочно отклонена. Отрицательный ответ обоснован только после проверки всей строки.

Не полноценная проверка адреса

Строка "@" также даст True, хотя одного символа недостаточно для адреса электронной почты. Функция не проверяет структуру локальной части, домен, доставляемость или владение адресом. Это демонстрация раннего завершения поиска.

Встроенная запись "@" in email короче для такой задачи, но в упражнении сохранён явный цикл, чтобы показать размещение двух return и условие продвижения индекса.

Hexlet / Code Basics и участники · Исходный урок и решение · GNU AGPL v3. Алгоритм сохранён; предел проверки email обозначен.

Reading preferences

Appearance
Contrast
More options

Saved only in this browser. Your device’s reduced-motion setting is always respected. Browser zoom works throughout the site.