三項演算子 補足

この記事(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

というプログラムを見ると、
期待する出力は

  1. i > j なら 0
  2. 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

となって解決.

これ使えばちょっとお洒落じゃないですかね.