mugaxのなんでも情報局

いろんな分野について発信していきます。

FizzBuzzの作り方 in Python

最近の大学では、文系学部でもプログラミングを学ぶ授業が必修科目になっていたりするようだ。

受験数学が嫌いでなかった人には、そう難しいことではないはずだ。初歩的なコードを書いて、プログラミングとはどういうものかを知るのが目的であることが多いからだ。

しかし、数学が嫌いで嫌いで仕方なかった人にはきついのかもしれない。そんな人たちのために、授業で使うことが多いであろうPythonを用いたFizzBuzzの作り方を説明しようと思う。

ここで行うFizzBuzzとは、次のようなものである。

1から100まで順番に数字を表示する。ただし、3の倍数のときは数字の代わりにFizz、5の倍数のときは数字の代わりにBuzz、3の倍数かつ5の倍数のときは数字の代わりにFizzBuzzと表示するものである

FizzBuzzはプログラミングの基本である。FizzBuzzを書けるというのは、水泳でいえば25メートル泳げること、バスケットボールでいえばレイアップシュートができること、料理でいえばリンゴの皮をむけることに等しいだろう。

それではさっそく行ってみよう。

まず、1から100まで表示するコードを書いてみる。

for num in range(1,101):
    print(num)

次に、3の倍数のときはFizzと表示する処理を加えてみる。

for num in range(1,101):
    if num % 3 == 0:
        print("Fizz")
    else:
        print(num)

さらに、5の倍数のときはBuzzと表示する処理を加えてみる。

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

さらに、3の倍数かつ5の倍数のときはFizzBuzzと表示する処理を加えてみよう。

次のように書いてしまった人は間違いだ。

for num in range(1,101):
    if num % 3 == 0:
        print("Fizz")
    elif num % 5 == 0:
        print("Buzz")
    # ここに書くのは間違い
    elif num % 3 == 0 and num % 5 == 0:
        print("FizzBuzz")
    else:
        print(num)

次のコードのように、FizzBuzzを表示する条件はif文の最初に書かなければならない。

これがFizzBuzzをプログラミングするときの最大のポイントであり、if文の理解度が問われているのだ。

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)

ここまでで完成なのだが、プログラミングの面白さはここからだ。

先ほどのコードはprint()を4回も書いてしまっている。仕様変更があったときに修正するのが面倒になるので、プログラミングにおいては同じ処理を何度も書くのは避けるのが良いとされている。

そこで、少し改良してみる。

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

    print(disp)

このようにすると、print()は1回だけ書けば済むのだ。

実は、まだ改良の余地がある。次のように書くと、条件を1つ省くことができ、コードは短くなる。

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

このように、意図したように動くコードが書けた後でも、もっと改良の余地はないかと考えていくのがプログラミングの楽しさのひとつなのである。