PythonでFizzBuzz問題を解いてみる


Python を勉強しようと思い、まずはFizzBuzz問題をやってみようと思います。
使用環境:Python 3.6.3

FizzBuzz問題とは

Jeff Atwood さんが提唱したこんな問題。

1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

マトリクスやベン図で書くとこんな感じ

コードにしてみる

for バージョン

Python
for i in range(1, 101):
    if i % 3 == 0 and i % 5 == 0:
        print('FizzBuzz')
    elif i % 3 == 0:
        print('Fizz')
    elif i % 5 == 0:
        print('Buzz')
    else:
        print(i)

while バージョン

Python
i = 1
while i <= 100:
    if i % 3 == 0 and i % 5 == 0:
        print('FizzBuzz')
    elif i % 3 == 0:
        print('Fizz')
    elif i % 5 == 0:
        print('Buzz')
    else:
        print(i)
    i += 1

三項演算子で書いてみる

for i in range(1,101):
    print('Fizz' if (i % 3 == 0 and i % 5 == 0) else 'Fizz' if (i % 3 == 0) else 'Buzz' if (i % 5 == 0) else i)

ポイントは、print文の中に演算式を入れ込んでいるところ(さすがに見にくいので、各条件式に()つけてます)。
でも、入れ子の三項演算子にしないといけないから見にくい。。。

参考
三項演算子の構文
(条件がTrueのときの値) if (条件式) else (条件がFalseのときの値)

やってみてわかったこと

  • FizzBuzz問題は、条件判定や繰り返しの構文がわかってよいですね。
  • 個人的には、Python の三項演算子の構文に慣れない。