FizzBuzz Clásico
El reto de programación más famoso del mundo. Aprende a combinar condicionales y el operador módulo para resolver un problema de lógica clásico.
if/elif/else operador módulo % range() for loop
El problema
Escribe una función fizzbuzz(n) que devuelva una lista con los números del 1 al n, pero:
- Si el número es divisible por 3, escribe
"Fizz"en su lugar - Si el número es divisible por 5, escribe
"Buzz"en su lugar - Si es divisible por ambos (15), escribe
"FizzBuzz" - En cualquier otro caso, escribe el número como string
Ejemplos
fizzbuzz(15)
# ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz",
# "11", "Fizz", "13", "14", "FizzBuzz"]
| n | 3 | 5 | 6 | 10 | 15 |
|---|---|---|---|---|---|
| resultado | "Fizz" | "Buzz" | "Fizz" | "Buzz" | "FizzBuzz" |
Código inicial
def fizzbuzz(n):
resultado = []
# Tu código aquí
return resultado
print(fizzbuzz(15))
El operador módulo %
El operador % devuelve el resto de una división entera. Es la clave para detectar divisibilidad:
10 % 3 # 1 (10 / 3 = 3 con resto 1)
9 % 3 # 0 (9 / 3 = 3 exacto → divisible)
15 % 5 # 0 (15 / 5 = 3 exacto → divisible)
Cuando n % x == 0, el número n es divisible por x.
Variante avanzada: sin repetir lógica
Un truco elegante para evitar verificar % 15 explícitamente:
def fizzbuzz_elegante(n):
resultado = []
for i in range(1, n + 1):
salida = ""
if i % 3 == 0:
salida += "Fizz"
if i % 5 == 0:
salida += "Buzz"
resultado.append(salida or str(i))
return resultado
Aquí acumulamos "Fizz" y/o "Buzz" en la misma variable. salida or str(i) devuelve str(i) solo si salida está vacío (falsy).
Próximos pasos
- Generaliza la función:
fizzbuzz_custom(n, reglas)dondereglases un dict como{3: "Fizz", 5: "Buzz"} - Modifica la función para que imprima directamente en vez de devolver una lista