今回は、Pythonでよく出題される、次の問題について考えてみました。初心者から挑戦できる問題ですので、ぜひやってみてください。
問題
1~100の数字で、
3で割り切れれば、「Fizz」を表示する
5で割り切れれば、「Buzz」を表示する
3と5で割り切れれば、「FizzBuzz」を表示する
上記以外の場合は、そのままの数字を表示する
それでは考えてみましょう。
条件分岐を使った解答
1番初めに思いつくのが次のように条件分岐で実現する方法ではないでしょうか。
1 2 3 4 5 6 7 8 9 |
for i in range(1, 101): if i % 15 == 0: print("FizzBuzz") elif i % 3 == 0: print("Fizz") elif i % 5 == 0: print("Buzz") else: print(i) |
このように、条件分岐で実現できました。
より汎用的に
では、この問題にさらに条件がついた場合はどうでしょう。
例えば、7で割り切れれば、「Puzz」を表示する。
7で割り切れれば、「Puzz」を表示する。
21で割り切れれば、「FizzPuzz」を…
35, 105で割り切れる場合も、同じような条件で出力するとします。
また、今回は条件に105で割り切れるか、というものがあるので、1~200の数字で調査します。
フラグ管理する方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
for i in range(1, 201): flg = 0 print("") if i % 3 == 0: print("Fizz", end = "") flg = 1 if i % 5 == 0: print("Buzz", end = "") flg = 1 if i % 7 == 0: print("Puzz", end = "") flg = 1 if flg == 0: print(i, end = "") |
プリントしたかどうかをフラグで判定し、出力することで実現できます。
フラグが0のままの場合は、まだ何もプリントされていないので、そのままの数字を表示します。
また、3行目で「print(“”)」と書いているのは、ここに改行を入れるためです。逆に他のプリントで「, end = “”」と書いているのは、改行を入れないためです。
文字列を管理する方法
1 2 3 4 5 6 7 8 9 10 11 |
for i in range(1, 201): string = "" if i % 3 == 0: string += "Fizz" if i % 5 == 0: string += "Buzz" if i % 7 == 0: string += "Puzz" if not string: string = i print(string) |
こちらの方がすっきりとまとまっている印象ですね。
こちらでは文字を連結し、最後に出力する方法をとっています。
数値と文字列の連結はできないので、10行目では「+=」ではなく「=』を使っています。