Ya escribí un post en este blog sobre el test de “Fizz Buzz”, una pequeña prueba usada por muchas compañías durante una entrevista de trabajo para evaluar los conocimientos de programación del candidato al puesto. No es una prueba difícil pero durante una entrevista ya se sabe que los nervios pueden jugarte una mala pasada. Lo que se valora principalmente (a parte de conseguir resolverlo, evidentemente) es el tiempo que lleva su resolución así como la eficiencia del código utilizado.
Ya ofrecí su solución en Java en el post indicado anteriormente y ahora he querido ofrecer su versión en Python. El código es sencillo pero he añadido unas pequeñas “mejoras” para que su visualización quede mejor. Python por defecto imprime los resultados de salida en una columna, por lo que en este caso queda una columna de 100 elementos complicada de leer. El código end=’ ‘ después de cada print hace que el resultado se imprima horizontalmente en lugar de verticalmente. El comando \n en el print del primer if hace que haya además un salto de línea después de cada “fizzbuzz”, es decir, después de cada múltiplo de 3 y 5 (aka de 15), lo que muestra un resultado final en 7 líneas cómodo de visualizar. El código es el siguiente:
i = 1 while i <= 100: if (i%15) == 0: print ("fizzbuzz\n", end=' ') i = i + 1 elif (i%5) == 0: print ("buzz", end=' ') i = i + 1 elif (i%3) == 0: print ("fizz", end=' ') i = i + 1 else: print (i, end=' ') i = i + 1
El resultado ejecutado en Jupyter Notebook:
Hay una versión bastante graciosa que te permite hacerlo como un one-liner a base de mapeos, lambdas y ternarios.
print(list(map(lambda z: “Fizz” if type(z)==int and z%3==0 else z, map(lambda y: “Buzz” if type(y)==int and y%5==0 else y, map(lambda x: “FizzBuzz” if x%15==0 else x, range(1, 101))))))