Saltar al contenido principal

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"]
n3561015
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) donde reglas es un dict como {3: "Fizz", 5: "Buzz"}
  • Modifica la función para que imprima directamente en vez de devolver una lista