PythonでFizzBuzz


はじめに

みなさん FizzBuzz ってご存知ですか?恥ずかしながら主は先日まで FizzBuzz という言葉すら知りませんでしたよ、ええ。

ということで、復習がてら FizzBuzzについてまとめたいと思います。

FizzBuzz とは

 元々は英語圏の言葉遊びで、複数のプレイヤーで以下の条件に従って 1 から順番に数字を発言するというゲームのようです。

  • 3 で割り切れる数の場合は "Fizz" と発言
  • 5 で割り切れる数の場合は "Buzz" と発言
  • 3,5の両方で割り切れる場合は "FizzBuzz" と発言
  • 上記のいずれにも該当しない場合は数字をそのまま発言


A「1」
B「2」
C「Fizz」
A「4」
B「Buzz」
...
A「13」
B「14」
C「FizzBuzz」

ま、こんな感じですね。

実装

さて、それではルールに従って特に何も考えず単純に実装してみましょう。

fizzbuzz.py
for num in range(1,101):
    if num % 15 == 0:
        print("FizzBuzz")
    elif num % 3 == 0:
        print("Fizz")
    elif num % 5 == 0:
        print("Buzz")
    else:
        print(num)
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz

はい、できました。非常に単純です。

出力を変える

割る数や出力する文字を変えることができたら便利ですね。

fizzbuzz.py
div1, div2 = 4, 6
word1, word2 = "Nogi", "Zaka"
for num in range(1,101):
    if num % div1 == 0:
        if num % div2 == 0:
            print(word1+word2)
        else:
            print(word1)
    elif num % div2 == 0:
        print(word2)
    else:
        print(num)

最近 class についても学んだので class を使って実践

python
class FizzBuzz:
    def __init__(self, div, string):
        self.div = div
        self.string = string

    def check(self,num):
        if num % self.div == 0:
            return self.string
        else:
            return ""

def main():
    fizz = FizzBuzz(4, "Nogi")
    buzz = FizzBuzz(6, "Zaka")
    for num in range(1, 101):
        result = fizz.check(num) + buzz.check(num)
        if result == "":
            print(num)
        else:
            print(result)
if __name__ == "__main__":
    main()
1
2
3
Nogi
5
Zaka
7
Nogi
9
10
11
NogiZaka
13
14
15
Nogi
17
Zaka
19
Nogi
21
22
23
NogiZaka

できました!乃木坂万歳!