たころぐ

興味の向くままに

Python_文字列に対する算術演算!?

下記のQiita記事に対して興味深いコメントをいただきました。 (説明や意見のコメントはなく様々な解き方だけを書かれたので、はじめはびっくりしましたがよくよく読むとなかなか興味深いことが書かれている。 へーこんな書き方もあるんですね。Python って面白い!

qiita.com

中でも興味を持ったのは、

for i in range(1, 101):
    print((i % 3 == 0) * "Fizz" + (i % 5 == 0) * "Buzz" or i)

という書き方。 こんな書き方をしたくて探してたけど、なかなかたどり着けなかったこと。こんなことできるのね。

文字列に対する算術演算!?

(i % 3 == 0) * "Fizz"

このコードを見ると、条件評価結果のbool 値を文字列に掛けている!? なにこれ? bool型をint型として評価(false0で、true1)しているのかな? 調べてみると、Pythonのbool型はint型のサブクラスとして実装されているみたいなので、やっぱりfalse0で、true1 として扱えるのね。

でもまだ気持ちわるい。数字と文字列を掛けている?そんなことできるのね。 こちらも調べてみると、Python ではできるらしい。

>>> 1 * 'hoge'
'hoge'

>>> 3 * 'hoge'
'hogehogehoge'

おもしろい♪ Pythonの算術演算や論理演算の仕様について、もっと調べてみようと思います。