Bucle for-else de Python
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
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:
- Primer ejemplo: después de recorrer toda la lista (sin ejecutar break), se ejecuta else.
- 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
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
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
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
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.- No
elseyifconfundas su uso. - Esta sintaxis es exclusiva de Python; otros lenguajes no la tienen.
Sentencias de bucle de Python3
Otras extensiones