Nivel: Principiante
Tema: Condicionales, bucles, claridad de código, funciones puras, tests con pytest
Objetivo: Implementar FizzBuzz de forma clara, predecible y fácil de testear, evitando “scripts mágicos” y favoreciendo funciones pequeñas.
Enunciado
Crea una función llamada fizzbuzz(n) que:
- Reciba un valor
n. - Si
nesNone, lanceTypeError. - Si
nno es un entero (int), lanceTypeError. - Devuelva:
"FizzBuzz"sines divisible por 3 y 5,"Fizz"si es divisible solo por 3,"Buzz"si es divisible solo por 5,- el propio número
nen cualquier otro caso.
No imprimas resultados. La función debe devolver un valor.
Ejemplos
fizzbuzz(3)→"Fizz"fizzbuzz(5)→"Buzz"fizzbuzz(15)→"FizzBuzz"fizzbuzz(7)→7fizzbuzz(0)→"FizzBuzz"fizzbuzz(None)→ TypeErrorfizzbuzz("3")→ TypeError
Pistas
- El orden de las condiciones importa: comprueba primero el caso “3 y 5”.
- Usa el operador módulo
%para verificar divisibilidad. - Mantén la función pequeña y sin efectos secundarios.
Solución explicada (paso a paso)
- Validamos que
nno seaNoney sea un entero. - Comprobamos primero si es divisible por 3 y 5.
- Luego comprobamos divisibilidad por 3.
- Luego por 5.
- Si no cumple ninguna condición, devolvemos el número original.
Ejecuta:
pytest -q
Variantes para subir de nivel (opcional)
- FizzBuzz en rango: devolver lista de resultados de 1 a
n - Parámetros configurables: cambiar divisores y palabras
- Implementación funcional: separar validación y lógica
- Versión CLI: imprimir resultados en consola
Lo que aprendiste
- Importancia del orden en condicionales
- Cómo escribir funciones puras y testeables
- Validación estricta de entradas
- Cómo convertir un ejercicio clásico en código limpio
Accede al código completo y a los tests en GitHub para ejecutar y modificar la solución localmente.
Sigue con Reto #9 — Contar vocales en una cadena para reforzar strings, bucles y condiciones simples.