Bucle for-else de Python

Python3 循环语句Sentencias de bucle de Python3


En Python,forun bucle puede tener unaelsecláusula else, que es una sintaxis exclusiva de Python, a diferencia de la mayoría de los demás lenguajes de programación.

for-elseEstructura: cuando el bucle se completa normalmente (es decir, no esbreakinterrumpido por break), se ejecutaelseel código de la cláusula else.

Significado de la palabra: elseSignifica "otro", y aquí representa "el procesamiento después de que el bucle termina normalmente".


Sintaxis básica y parámetros

Formato de sintaxis

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

Lógica de ejecución

  • Finalización normal: Después de que el bucle recorre todos los elementos, se ejecuta la cláusula else.
  • Terminado por break: Si el bucle se interrumpe con break, la cláusula else no se ejecuta.
  • Terminación anómala: Si se produce una excepción en el bucle, else tampoco se ejecuta.

Ejemplo

Ejemplo 1: Uso básico: se ejecuta cuando la búsqueda falla

Ejemplo

# Buscar números pares en la lista; si se encuentra, imprimirlo; si no se encuentra, ejecutar else
numbers = [1, 3, 5, 7, 9]

for num in numbers:
    if num % 2 == 0:
        print(f"Número par encontrado: {num}")
        break
else:
    print("No se encontró ningún número par")

print("---")

# Caso en el que la lista contiene números pares
numbers = [1, 3, 6, 7, 9]
for num in numbers:
    if num % 2 == 0:
        print(f"Número par encontrado: {num}")
        break
else:
    print("No se encontró ningún número par")

Resultado esperado:

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

Análisis del código:

  1. Primer ejemplo: después de recorrer toda la lista (sin ejecutar break), se ejecuta else.
  2. Segundo ejemplo: al encontrar un número par, se ejecuta break y se omite else.

Ejemplo 2: Aplicación común: encontrar números primos

Ejemplo

# Determinar si un número es primo
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} no es primo, es divisible por {i}")
            return False
    else:
        # El bucle termina normalmente, lo que indica que no se encontraron factores
        print(f"{n} es primo")
        return True

# Prueba
is_prime(7)   # Salida: 7 es primo
is_prime(10)  # Salida: 10 no es primo, es divisible por 2

Resultado esperado:

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

Este es uno de los usos más clásicos de for-else: después de completar el recorrido de búsqueda, si no se encuentra el objetivo, se ejecuta else.

Ejemplo 3: Comparación con break

Ejemplo

# Escenario: recorrer la lista para buscar un elemento específico
fruits = ["apple", "banana", "orange", "grape"]

# Usando for-else
print("=== Usando for-else ===")
for fruit in fruits:
    if fruit == "orange":
        print(f"Encontrado: {fruit}")
        break
    print(f"Comprobando: {fruit}")
else:
    print("Objetivo no encontrado")

print("\n"=== Sin usar break ===")
# Otra forma de escribirlo (sin usar else)
found = False
for fruit in fruits:
    if fruit == "orange":
        print(f"Encontrado: {fruit}")
        found = True
        break
    print(f"Comprobando: {fruit}")

if not found:
    print("Objetivo no encontrado")

Resultado esperado:

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

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

La sintaxis for-else es más concisa y no requiere una variable de bandera adicional.

Ejemplo 4: Manejo de la finalización del bucle

Ejemplo

# Escenario: verificar si todos los elementos cumplen la condición
scores = [85, 90, 78, 92, 88]

# Comprobar si hay algún reprobado
print("=== Comprobar si hay reprobados ===")
for score in scores:
    if score < 60:
        print(f"Reprobado encontrado: {score}")
        break
    print(f"{score} puntos, aprobado")
else:
    print("Todas las calificaciones están aprobadas")

# Otro escenario: ejecutar la limpieza después de completar todo el procesamiento
print("\n"=== Limpieza al finalizar el procesamiento ===")
files = ["a.txt", "b.txt", "c.txt"]

for file in files:
    print(f"Procesando archivo: {file}")
else:
    print("Todos los archivos han sido procesados, se ejecuta la limpieza")
    print("--- Limpieza completada ---")

Resultado esperado:

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

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

for-else también se puede utilizar en escenarios de "ejecutar la limpieza al finalizar".

Ejemplo 5: Aplicación práctica: verificación de inicio de sesión

Ejemplo

# Simular intentos de inicio de sesión
def try_login(username, password):
    valid_users = {
        "admin": "123456",
        "user": "password",
        "guest": "guest"
    }

    print(f"Intentando iniciar sesión: {username}")

    for user, pwd in valid_users.items():
        if user == username and pwd == password:
            print("¡Inicio de sesión exitoso!")
            return True

    else:
        # Después de recorrer todos los usuarios, no hubo coincidencia
        print("Nombre de usuario o contraseña incorrectos")
        return False

# Prueba
try_login("admin", "123456")  # Salida: Inicio de sesión exitoso
print("---")
try_login("admin", "wrong")    # Salida: Nombre de usuario o contraseña incorrectos

Resultado esperado:

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

for-else es muy útil en escenarios de búsqueda mediante recorrido, ya que expresa claramente la lógica de "no encontrado".

Notas

  • elseno esifuna parte de, sinoforuna parte de.
  • Noelseyifconfundas su uso.
  • Esta sintaxis es exclusiva de Python; otros lenguajes no la tienen.

Python3 循环语句Sentencias de bucle de Python3


Otras extensiones