pythonでfizzbuzzワンライナー

なんとなくpythonfizzbuzzワンライナーをやってみた。


とりあえず何も考えずに条件演算式(c++とかの三項演算子みたいなもの)を使って作成したワンライナー

print("\n".join(["fizzbuzz" if (x % 3) == 0 and (x % 5) == 0 else "fizz" if (x % 3) == 0 else "buzz" if (x % 5) == 0 else str(x) for x in range(1, 101)]))


一応期待どおり動いたが、長いので少しだけ改良。

print("\n".join([((""if x%3 else"fizz")+(""if x%5 else"buzz"))or str(x) for x in range(1,101)]))

この改良版ではpythonの条件判定では、空の文字列は偽(false)と評価されることと
or演算子では返す値を 0 や 1 に制限するのではなく、最後に評価した引数の値を返すことを利用して少しだけ短縮した。
式 (expression) — Python 2.7ja1 documentation


更に短縮してみたいが今のところパッと思いつかないので、思いついた時に書くことにしよう。