4 Ways to Solve FizzBuzz in Python

FizzBuzz is a challenge that involves writing code that labels numbers divisible by three as “Fizz,” five as “Buzz” and numbers divisible by both as “FizzBuzz.” Here’s how to solve it in Python.

Written by Emmett Boudreau
fizzy soda in a glass to represent fizzbuzz concept
Image: Shutterstock / Built In
Brand Studio Logo
UPDATED BY
Brennan Whitfield | Mar 21, 2025

The FizzBuzz problem in Python is a coding challenge where code must be written to print integers 1 to n, printing “Fizz” for integers divisible by three, “Buzz” for integers divisible by five and “FizzBuzz” for integers divisible by both three and five.

4 Methods for Solving FizzBuzz in Python

  1. Conditional statements
  2. String concatenation
  3. Itertools
  4. Lambda

FizzBuzz is a common problem that programmers are asked to solve in technical interviews and take-home assignments. Originally, FizzBuzz was designed as a word game for children to teach them about division. In the game, each number divisible by three will be returned with a Fizz and each number divisible by five will return a Buzz. I was never a big fan of the test, but it can help weed out weaker applicants.

While the FizzBuzz test is pretty easy to pass so long as you know the right operators, there are a variety of different ways to solve it. However, some solutions might prove to be more impressive than others, and I think this is something to keep in mind when working on this problem for a real interview. In addition to demonstrating these alternative methods of solving FizzBuzz in Python, we are going to time each solution and compare the respective results.

 

A tutorial on how to solve FizzBuzz in Python. | Video: Programming with Mosh

How to Solve FizzBuzz in Python

1. Conditional Statements

The most popular and well-known solution to this problem involves using conditional statements. For every number in n, we are going to need to check if that number is divisible by three or five. If the number is divisible by three, it will print Fizz; if the number is divisible by five, it will print Buzz. The key here is simply knowing what operators to use to check for divisibility. In Python, we can use the modulus operator, %.

In computing, the modulo operation is meant to return the signed remainder of division. If a number is divisible by another, the remainder will always be zero, so we can use that to our advantage whenever we make our FizzBuzz code. We will structure condition blocks like this, where num is the iteration in a list of numbers.

if num % 3 == 0:
    print('Fizz')

We can now build an iterative loop following the same principle, except we’ll be adding Fizz and Buzz:

for num in range(1, 101):
    if num % 3 == 0 and num % 5 == 0:
        print('FizzBuzz')
    elif num % 3 == 0:
        print('Fizz')
    elif num % 5 == 0:
        print('Buzz')
    else:
        print(num)

2. String Concatenation

Similar to its regular conditional loop counterpart, the string concatenation method is another really great way to solve this problem. 

Line-By-Line String

Of course, this method is also all but too similar to the conditional method. The significant difference here is that the conditionals are simply going to be affecting a small sequence of characters put into the string data type.

for num in range(1,101):
    string = ""
    if num % 3 == 0:
        string = string + "Fizz"
    if num % 5 == 0:
        string = string + "Buzz"
    if num % 5 != 0 and num % 3 != 0:
        string = string + str(num)
    print(string)

One-Line String

You can also print the string into a single line by using a function to check the divisions and formatting the results together. This method takes a bit longer but is useful for creating a one-line output.

def FizzBuzz():
    string_co = []
    for num in range(1,101):
        string = ""
        if num % 3 == 0:
            string = string + "Fizz"
        if num % 5 == 0:
            string = string + "Buzz"
        if num % 5 != 0 and num % 3 != 0:
            string = string + str(num)
        string_co.append(string)
    return string_co
        
string_co = FizzBuzz() 

for i in string_co:
    print(i, end=" ")

3. Itertools

Another way we could approach this problem — as well as other iteration problems — is to use the Python standard library tool, itertools. This will create a loop with better performance than most other iteration methods. Itertools can be thought of as an iteration library that is built to mirror several other extremely performant libraries from other languages, except using Pythonic methods for solving problems.

Itertools will need to be imported, however, it is in the Python standard library. This means pip won’t be necessary, but itertools is still considered a project dependency. We are going to utilize three different methods from this module:

  • cycle(): Cycle is a function that takes a basic data type and creates an iterator out of it. This function is useful and makes building custom iterators incredibly easy in Python.
  • count(): Count is another generator that iterates a range. This iterator is often called an “infinite iterator,” which basically means that the count() function could essentially loop on and on forever.
  • islice(): The islice function is short for “iteration slice.” We can use this iterator to cut out particular elements in a data structure and iterate them.

Combining these methods will allow us to create a new function where we can solve the FizzBuzz problem without using the typical iteration methods in Python that we might be used to.

import itertools as its
def fizz_buzz(n):
	fizzes = its.cycle([""] * 2 + ["Fizz"])
	buzzes = its.cycle([""] * 4 + ["Buzz"])
	fizzes_buzzes = (fizz + buzz for fizz, buzz in zip(fizzes, buzzes))
	result = (word or n for word, n in zip(fizzes_buzzes, its.count(1)))
	for i in its.islice(result, n):
		print(i)
fizz_buzz(100)

The benefits of using this methodology is that the itertools library’s methods of iteration are typically going to be a lot faster than the Pythonic methods of iteration. While itertools is still Pythonic, it is likely that the speed of iterative looping is going to improve when using this library over the typical for loop in Python. Needless to say, creating a faster algorithm than any other applicant could certainly put you on the map for getting the job. This is a valuable module and application of the module for programmers who are still searching for employment.

4. Lambda

Another method we could use to solve this problem is even more Pythonic of a solution, and it makes use of Python’s bridge to scientific computing, lambda. There are a lot of standard functions that can be used with these lambda expressions, and they certainly come in handy. One of the most frequently used methods in this regard is the map() method. This method is going to take an expression that we can create using lambda as well as an iterative data structure.

print(*map(lambda i: 'Fizz'*(not i%3)+'Buzz'*(not i%5) or i, range(1,101)),sep='\n')

For this example, I used the range generator, and the not keyword in order to reverse the polarity of the modulus operator’s usage.

Related55 Top JavaScript Interview Questions With Example Answers

 

What’s the Best Way to Solve FizzBuzz in Python?

With all of these new ways to solve the problem, you might be wondering which one you should use. Of course, there are going to be trade-offs between the solutions, but in order to really make a great impression, we could narrow our decision down to using either the lambda method or the itertools method.

The lambda method has the advantage of being incredibly concise. However, depending on what code the map() method uses for iteration, it might trail behind the itertools method in terms of speed due to its less efficient iteration. The only way to figure out whether or not this is the case is to run some tests and compare our interpreter return times. 

So, that is going to be the mission between comparing these two heaps of code. In order to facilitate this comparison, I am going to be using the IPython magic in-line command, %timeit

Let’s start by trying it out on the itertools method. Since I wrote this as a function earlier, I can simply time the function call:

%timeit fizz_buzz(100)
fizzbuzz python timed results  for itertools
Timed results for FizzBuzz using itertools. | Image: Emmett Boudreau

We will do the same with the lambda method:

%timeit print(*map(lambda i: 'Fizz'*(not i%3)+'Buzz'*(not i%5) or i, range(1,101)),sep='\n')
timed results with the lambda method
Timed results for FizzBuzz using the lambda method. | Image: Emmett Boudreau

Just as I predicted, the itertools method came in just a little faster, while the lambda method lagged slightly behind losing less than a millisecond off of the overall interpretation time. The answer here is somewhat of a mixed bag because the concise nature of the lambda expression and map() function in tandem make the lambda method appear to be a lot more impressive. But the compile time of the itertools method is most certainly impressive because of its speed.

As is often the case in programming, there are multiple ways to do one thing, and as is also often the case, some ways are significantly better than others. There are certainly some trade-offs depending on what methodology you select, but this is what defines your own style as a programmer. I believe regardless of the decision that is made, using these faster methods will almost certainly make any aspiring programmer look a lot more proficient in their take home assignment. Furthermore, any aspiring programmer could certainly learn a lot more about programming and the language they are programming in by trying out different methods of doing the same thing. 

Frequently Asked Questions

The FizzBuzz problem in Python is a coding test where within a sequence of integers 1 to n, numbers divisible by 3 must print “Fizz,” numbers divisible by 5 must print “Buzz” and numbers divisible by both 3 and 5 must print “FizzBuzz.” The problem is typically given in coding interviews to assess programming skills and competence.

Yes, FizzBuzz is still used as a screening question in coding interviews as a way to gauge a developer’s programming and problem-solving skills.

Explore Job Matches.