Ejercicio 05 — Escribe es_primo(n) que devuelva True/False
Dificultad: amarillo · Módulo 04 (Funciones)
Enunciado
Escribe es_primo(n) que devuelva True/False. Pide un número e indica si es primo.
Cómo se resuelve
Comprobar si un número es primo enseña a combinar varios return con una optimización clave: basta probar divisores hasta la raíz cuadrada.
if n < 2: return False— 0, 1 y los negativos no son primos por definición. Lo despachamos primero con unreturntemprano para que el bucle solo trate números que tengan sentido.for i in range(2, int(n ** 0.5) + 1):— probamos divisores desde 2 hasta la raíz cuadrada den. Sintuviera un divisor mayor que su raíz, su pareja sería menor, y ya la habríamos encontrado; por eso no hace falta ir hastan.n ** 0.5es la raíz,int(...)la trunca y+ 1asegura incluir ese último candidato.if n % i == 0: return False— en cuanto encontramos un divisor exacto, sabemos que no es primo y salimos de inmediato: no tiene sentido seguir buscando.return True— estereturnsolo se alcanza si el bucle terminó sin encontrar ningún divisor. Su posición importa: está fuera del bucle, así que se ejecuta solo cuando ninguna vuelta cortó antes conFalse.
Trampa habitual: colocar el return True dentro del bucle. Si lo metes en el for, la función respondería True en cuanto el primer divisor no divide, sin haber comprobado el resto. El True tiene que ir después del bucle completo, porque solo entonces sabes que ningún candidato dividía.
Para practicar — cópialo y complétalo
Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.
# Curso de Python — Modulo 04: Funciones
# Ejercicio 05 — PRACTICA (rellena los TODO)
# Enunciado: Escribe es_primo(n) que devuelva True/False. Pide un número e indica si es primo.
# Dificultad: amarillo
# Ejecutar: python3 ej05_practica.py
def es_primo(n):
"""Devuelve True si n es un numero primo, False en caso contrario."""
# TODO: si n < 2, devuelve False directamente (0 y 1 no son primos)
# TODO: recorre i desde 2 hasta int(n ** 0.5) + 1 (inclusive)
# Pista: range(2, int(n ** 0.5) + 1)
# Si n % i == 0, devuelve False (encontraste un divisor)
# TODO: si el bucle termina sin encontrar divisor, devuelve True
pass
# TODO: pide n con int(input(...))
n = None # reemplaza None
# TODO: imprime con f-string: "<n> es primo: <es_primo(n)>"Solución — cópiala y ejecútala
# Curso de Python — Modulo 04: Funciones
# Ejercicio 05 — MODELO (resuelto)
# Enunciado: Escribe es_primo(n) que devuelva True/False. Pide un número e indica si es primo.
# Dificultad: amarillo
# Ejecutar: python3 ej05_modelo.py
def es_primo(n):
"""Devuelve True si n es un numero primo, False en caso contrario."""
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
n = int(input("Introduce un numero entero: "))
print(f"{n} es primo: {es_primo(n)}")Cómo usarlo
Pega el código en un fichero y ejecútalo con tu toolchain habitual (o el botón de Ejecutar de tu editor). Antes de mirar la solución, intenta completar tú el esqueleto: es la mejor forma de aprender.