FizzBuzzとの3か月(12)

お世話になっております。

今日は台風の影響により、電車の運行が止まっていました。
差し迫った用事もなかったので、休暇にしてしまいました。

さて、今日もPythonによるFizzBuzz実装ですが、昨日までとは方向を変更し、ワンライナーに挑戦してみました。
影響を受けたのはこちらの記事です。
FizzBuzz>それLINQで>それワンライナーで - まさるDiary
以下、コードです。

print(str(['FizzBuzz' if x % 3 == 0 and x % 5 == 0 else 'Fizz' if x % 3 == 0 else 'Buzz' if x % 5 == 0 else x for x in range(1, 101)]).strip('[]').replace('\'', '').replace(' ', '').replace(',','\r\n'))

大きく分けると、3つの処理からできています。

  1. リスト内包表記により、Fizz/Buzz/FizzBuzzを含んだリストを作る処理。
  2. 上のリストの文字列表現を操作する処理。
  3. 最後に文字列を出力する処理。

2番目の文字列操作の部分が、あまりにも見苦しいです。
遊びで書く分には楽しくていいのですが、業務でこういうコードを見ると削除したくなります。

もう少しわかりやすく書くと、以下のようになります。

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

こちらは無駄な文字列処理もなく、シンプルになりました。

以上