Si eres programador o estas aprendiendo a programar seguramente te has encontrado con el FizzBuzz Challenge o lo encontraras.
A continuación hablaremos acerca de este reto y lo implementaremos utilizando list comprehension de python!
Que es FizzBuzz Challenge
Se nos pide escribir un programa el cual nos imprima n cantidad de numeros.
Si el numero es multiplo de 3 imprimir Fizz
Si el numero es multiplo de 5 imprimir Buzz
Si el numero es multiplo de 3 y de 5 imprimir FuzzBuzz
Si el numero no es multiplo de ninguno imprimir el numero
Implementación regular FizzBuzz
Para entender como funciona nuestra list comprehension primero necesitamos entender como necesita funcionar nuestro programa.
La forma mas sencilla de implementarlo es con un for
loop y con expresiones if
Primero necesitamos iterar por la cantidad de numeros
for i in range(1, 15):
En cada iteracion revisaremos nuestras condiciones utilizando nuestro operador modulus %
Podemos manejar este operador de forma booleana ya que cuando el resultado de el modulo es 0 nos regresa False
.
Podemos invertir nuestro resultado booleano utilizando not
y de esta forma cuando nuestro numero si sea divisible nos regresara True
, Esta logica la podemos implementar dentro de nuestro for
loop de la siguiente forma:
for i in range(1, 16):
if not (i%3 and not i%5):
print("FizzBuzz")
elif not (i%3):
print("Fizz")
elif not (i%5):
print("Buzz")
else:
print(i)
Nuestra respuesta en consola seria:
Felicidades, ya completaste el FizzBuzz Challenge.
FizzBuzz con List Comprehension
Para poder aplicar nuestro list comprehension debemos recordar que al utilizar el operador *
se repite esa cantidad de veces.
De esta forma podemos utilizar x = "string"*(not i%5):
Cuando el Resultado de nuestra evaluación sea False nuestro string no se mostrara.
primero evaluaremos nuestras condiciones.
Ejemplo:
"Fizz"*(not i%3)
Si i==2
entonces nuestra evaluacion seria False, Despues evaluamos con nuestro operador *
y al ser falso ese "String" no se estaria concatenando.
de esta forma:
FizzBuzzList = ["Fizz"*(not i%3) + "Buzz"*(not i%5) or i ]
Hasta aqui tenemos la parte logica de nuestro list comprehension.
Por cada iteracion pasaremos nuestro string en el que si no se cumple nuestra condicion no se concatena y cuando no se cumple ninguna condicion se concatena el numero de nuestra iteracion.
Ahora solo nos falta agregar nuestro for loop for i in range(1, 16)
, en range()
nuestro primer parametro es inclusivo y el segundo parametro es exclusivo.
De esta forma si necesitamos numeros de el 1 al 15 debemos ingresarle los parametros 1, 16
Nuestro List Comprehension final quedaria de la siguiente forma:
FizzBuzz = ["Fizz"*(not i%3) + "Buzz"*(not i%5) or i for i in range(1, 16)]
Espero les haya sigo de ayuda!
Happy Hacking!
Carlo Monroy
Top comments (0)