FizzBuzz in Python

I’ve been dabbling in Python recently, and stumbled across the FizzBuzz exercise, so I decided to test myself doing it in Python as a learning experience.

Now, since I am the proctor and test subject, I let myself have two concessions:

1. I was going to use a text editor, because this was for my own learning, not for an interview, and I didn’t feel like writing code longhand on paper. It’s my understanding that this condition is mainly there to prevent anyone from using the Internet to search for a solution.

2. I knew I could write this in C/C++ blindfolded with my hands tied behind my back, and that Python was my own choice to make it more educational. So, if I came across an obstacle where my unfamiliarity with Python was a limiting factor, I was going to let myself search for specific resolutions to that. This turned out to be necessary (and educational, as I hoped!).

So, I fired up IDLE and threw together a quick script:


import sys
for i in range(1,100):
print_number=True;
if(i % 3) == 0:
sys.stdout.write('Fizz')
print_number=False
if(i % 5) == 0:
sys.stdout.write('Buzz')
print_number=False
if(print_number):
print i,
print

Apologies, Drupal seems to be eating my indents despite the <code> tag.

It didn’t start out exactly like that. First, I used the basic python print command, but that automatically adds a newline (which I knew). Then, I tried adding a comma after the Fixx, Buzz and i prints, which suppresses the newline — but appends a SPACE instead. 🙁 This resulted in almost-perfect output, however, it printed “Fizz Buzz” instead of “FizzBuzz” and the exercise says “FizzBuzz” so I thought I needed to do better.

Not having much skill with Python print formatting, I decided to allow myself a phone-a-Google and looked up details of Python formatting. Apparently the new print() function in Python 3 lets you control EOL formatting, but I didn’t have Python 3 available. So, the next best suggestion was to use the sys.stdout.write() function. I changed the Fizz and Buzz statements to that, leaving the print i as a print-with-comma, because as I understand, sys.stdout.write doesn’t do any formatting. And, the trailing space appended after printing i would not be an issue, since nothing needs to append to it on the same line. There’s a blank print at the end of the loop to force a newline no matter what printed previously.

One can debate about whether this is the best or most elegant or most efficient. I think it is both elegant and efficient. There aren’t multiple tests of the modularity of the number i, there aren’t tangled else/if and and tests. Some might quibble about the use of the extra print_number variable as being efficient, but I think it lends clarity to the code that other “more efficient” solutions lack.

This is the posting that sent me on this fowl-chase. And it cites this as some interesting solutions to the problem, and the FizzBuzzBazz variant. I think my design adapts well to FizzBuzzBazz.

FizzBuzz in Python
Scroll to top

connect

Have a difficult problem that needs solving? Talk to us! Fill out the information below and we'll call you as soon as possible.

Diagram of satellite communications around the Earth
Skip to content