Цикл for-else в Python

Python3 循环语句Операторы цикла Python3


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

for-elseСтруктура: когда цикл завершается нормально (т. е. неbreakпрерывается с помощью break), выполняетсяelseкод в ветви else.

Значение слова: elseelse означает "другое"; здесь оно означает "обработка после нормального завершения цикла".


Базовый синтаксис и параметры

Формат синтаксиса

for 变量 in 可迭代对象:
    循环体
else:
    循环正常结束时的处理

Логика выполнения

  • Нормальное завершение: после того как цикл переберёт все элементы, выполняется ветвь else.
  • Завершение с помощью break: если цикл прерывается с помощью break, ветвь else не выполняется.
  • Аварийное завершение: если в цикле возникает исключение, else также не выполняется.

Примеры

Пример 1: базовое использование - выполнение при неудачном поиске

Пример

# Найти чётные числа в списке, вывести, если найдены, выполнить else, если не найдены
numbers = [1, 3, 5, 7, 9]

for num in numbers:
    if num % 2 == 0:
        print(f"Найдено чётное число: {num}")
        break
else:
    print("Чётное число не найдено")

print("---")

# Случай, когда список содержит чётное число
numbers = [1, 3, 6, 7, 9]
for num in numbers:
    if num % 2 == 0:
        print(f"Найдено чётное число: {num}")
        break
else:
    print("Чётное число не найдено")

Ожидаемый вывод:

未找到偶数
---
找到偶数: 6

Пояснение к коду:

  1. Первый пример: после перебора всего списка (без выполнения break) выполняется else.
  2. Второй пример: после нахождения чётного числа выполняется break, пропуская else.

Пример 2: Типичное применение — поиск простых чисел

Пример

# Определить, является ли число простым
def is_prime(n):
    if n <= 1:
        return False

    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            print(f"{n} не является простым числом, оно делится на {i}")
            return False
    else:
        # Цикл завершается нормально, значит, делитель не найден
        print(f"{n} является простым числом")
        return True

#
is_prime(7)   # Вывод: 7 является простым числом
is_prime(10)  # Вывод: 10 не является простым числом, оно делится на 2

Ожидаемый вывод:

7 是质数
10 不是质数,能被 2 整除

Это одно из самых классических применений for-else: после завершения обхода поиска, если цель не найдена, выполняется else.

Пример 3: Сравнение с break

Пример

# Сценарий: перебор списка для поиска конкретного элемента
fruits = ["яблоко", "банан", "апельсин", "grape"]

# Использование for-else
print("=== Использование for-else ===")
for fruit in fruits:
    if fruit == "апельсин":
        print(f"Найдено: {fruit}")
        break
    print(f"Проверка: {fruit}")
else:
    print("Цель не найдена")

print("\n"=== Без использования break ===")
# Другой способ (без использования else)
found = False
for fruit in fruits:
    if fruit == "апельсин":
        print(f"Найдено: {fruit}")
        found = True
        break
    print(f"Проверка: {fruit}")

if not found:
    print("Цель не найдена")

Ожидаемый вывод:

=== 使用 for-else ===
检查: apple
检查: banana
找到: orange

=== 不使用 else ===
检查: apple
检查: banana
找到: orange

Синтаксис for-else более краток и не требует дополнительной переменной-флага.

Пример 4: Обработка завершения цикла

Пример

# Сценарий: проверить, все ли элементы удовлетворяют условию
scores = [85, 90, 78, 92, 88]

# Проверить, есть ли неудовлетворительные оценки
print("=== Проверить, есть ли неудовлетворительные оценки ===")
for score in scores:
    if score < 60:
        print(f"Найдена неудовлетворительная оценка: {score}")
        break
    print(f"{score} баллов, сдано")
else:
    print("Все оценки зачтены")

# Другой сценарий: выполнить очистку после завершения всей обработки
print("\n"=== Очистка после завершения обработки ===")
files = ["a.txt", "b.txt", "c.txt"]

for file in files:
    print(f"Обработка файла: {file}")
else:
    print("Все файлы обработаны, выполняю очистку")
    print("--- Очистка завершена ---")

Ожидаемый вывод:

=== 检查是否有不及格 ===
85 分,合格
90 分,合格
78 分,合格
92 分,合格
88 分,合格
所有成绩都及格

=== 处理完成后清理 ===
处理文件: a.txt
处理文件: b.txt
处理文件: c.txt
所有文件处理完成,执行清理工作
--- 清理完成 ---

for-else также можно использовать в сценариях, где вы "выполняете очистку после завершения".

Пример 5: Практическое применение - Проверка входа

Пример

# Имитация попыток входа
def try_login(username, password):
    valid_users = {
        "admin": "123456",
        "user": "password",
        "guest": "guest"
    }

    print(f"Попытка входа: {username}")

    for user, pwd in valid_users.items():
        if user == username and pwd == password:
            print("Вход выполнен успешно!")
            return True

    else:
        # После перебора всех пользователей совпадений не найдено
        print("Неверное имя пользователя или пароль")
        return False

#
try_login("admin", "123456")  # Вывод: Вход выполнен успешно
print("---")
try_login("admin", "wrong")    # Вывод: Неверное имя пользователя или пароль

Ожидаемый вывод:

尝试登录: admin
登录成功!
---
尝试登录: admin
用户名或密码错误

for-else очень полезен в сценариях обхода и поиска, четко выражая логику "не найдено".

Примечания

  • elseelse неifчасть if, а скорееforчасть for.
  • Неelseиifпутайте for-else с if-else.
  • Этот синтаксис уникален для Python; в других языках его нет.

Python3 循环语句Операторы цикла Python3


Другие расширения