Python プログラミング メモ

FizzBuzz問題を考える




FizzBuzz問題はコーディング初心者向けの問題として有名です。

条件分岐の練習で、以下のようなコードが一般的な正解かと思います。

def fizzbuzz(n):
    for i in range(1, n):
        if i % 15 == 0: # 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)


fizzbuzz(100)

ですが、ある方が紹介していた方法でカッコイイ書き方があったのでメモ。

def fizzbuzz(n):
    for i in range(1, n):
        result = ""
        if i % 3 == 0:
            result += "Fizz"
        if i % 5 == 0:
            result += "Buzz"
        print(result or i)


fizzbuzz(100)

カッコイイですね。

なぜ、この書き方が機能するのか?

ポイントは result 変数を使って、 FizzBuzz の場合も Fizz の場合も Buzz の場合にも対応できるという事。

更に3でも5でも割り切れない場合は result 変数が更新されない("")のままである。

"" は論理演算では False と同意となる。

これを利用すると、result 側が "" 以外であれば resultが出力され、result側が "" であれば i の値を出力する事になる。

なんと素晴らしい論理演算の使い方。。。

実戦ではこうやって上手く論理演算を使っていきたいですね。

忘れた時にこの記事を見返して思い出します。

以上

-Python, プログラミング, メモ

Copyright© donguri.pyのblog , 2024 All Rights Reserved.