三項演算子 補足
この記事(2011-11-08 - I/O Error : My Knowledge)で
三項演算子について軽く書いて,自分で使ってみてると上手くいかないことが起きたのでメモ.
コード例
from random import randint def r(): i, j = randint(-10, 10), randint(-10, 10) print 'i =', i, '\nj =', j return i > j and 0 or j - i
というプログラムを見ると、
期待する出力は
- i > j なら 0
- j ≧ i なら j - i
である.
しかし実行してみると、
>>> r() i = -9 j = 9 18 >>> r() i = 7 j = 0 -7
となり,下の例がうまくいってないことが分かる.
おそらく
and 0
に問題があるだろう.
解決コード例
じゃあどうすれば,と言う事で手っ取り早いのは,
def s(): i, j = randint(-10, 10), randint(-10, 10) print 'i =', i, '\nj =', j return j >= i and j - i or 0
としてひっくり返してしまえば良いんじゃないでしょうかw
こうすることで,
>>> s() i = -3 j = 9 12 >>> s() i = 10 j = -10 0
となって解決.
これ使えばちょっとお洒落じゃないですかね.