CodeKata第一問 : FizzBuzz @Python3.4
今日からpythonの練習課題として、ひとつずつ問題を解き、同時にそのコードと解説をブログに綴ってみようと思います。。。
もっといい書き方がある!って思った方は教えてください(^_^;)
それでは始めてみましょう!
第一回目のお題は「FizzBuzz」
問題
1から順番に数を表示する。その数が3で割り切れるなら"Fizz"、5で割り切れるなら"Buzz"、両方で割り切れるなら"FizzBuzz"と表示する。要するに"1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz ・・・"と出力される。
プログラマかどうかがわかるんだとさ...(-_-;)
実行例 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fizz22 23 Fizz Buzz 26 Fizz 28 29 FizzBuzz 31 32 Fizz 34
考え方
つまり3の倍数の時は"Fizz"、5の倍数の時は"Buzz"、15の倍数の時は"FizzBuzz"と表示すればいいので、単純に数字をひとつずつif文で判断していけばいいかと思います。
コード
def fizzbuzz(num):
ret = ""
for i in range(1, num + 1):
if i % 3 == 0:
ret += "Fizz"
if i % 5 == 0:
ret += "Buzz"
if (i % 3 != 0) and (i % 5 != 0):
ret += str(i)
ret += " "
return ret
if __name__ == "__main__":
print(fizzbuzz(50))
解説
今回は、1から引数に取った値までを判定する関数、fizzbuzzを作成しました。
この関数は、単純に1~引数までの値を順にif文で判断しているだけですので解説することはほぼありません...(^_^;)
強いて言えば、if文に少し工夫を加えたところぐらいでしょうか
つまり、本来ならば15と3と5とそれ以外を判断するには、下記のように条件式が4つ必要になります。
if (i % 3 == 0) and (i % 5 == 0):
ret += "FizzBuzz"
elif i % 3 == 0:
ret += "Fizz"
elif i % 5 == 0:
ret += "Buzz"
else:
ret += str(i)
ret += " "
しかし、今回は、下記のようにあえてelif,elseを用いずにifのみで条件式を3つで済ませました。
if i % 3 == 0:
ret += "Fizz"
if i % 5 == 0:
ret += "Buzz"
if (i % 3 != 0) and (i % 5 != 0):
ret += str(i)
ret += " "
このように記述することで、iが15の倍数であった時は「if i % 3 == 0:」と「if i % 5 == 0:」の中身が両方実行され、”FizzBuzz "という文字列になります。
今回使用した要素
>>> 4 % 2 4を2で割った時のあまりを求めることができます
0
>>> a = 3
>>> a += 2 変数aに2を足すことができます
>>> a
5