pythonのorとandはブール演算子のくせにブール型を返さず、比較した値そのものを返す
>>> True and False
False
>>> 0 or 1
1
or
x or y
xがTrueならxを返す
xがFalseならyを返す
and
x and y
xがTrueならyを返す
xがFalseならxを返す
なのでいっぱい繋げて
>>> 0 and 1 or 1 or 0 and 1
1
>>> 0 and 1 or (1 or 0) and 1
1
>>> 0 and (1 or 1) or 0 and 1
0
とか遊べる
評価は括弧の中をした後、前から順番に行われるので
>>> ((((0 and 1) or 1) or 0) and 1)
1
>>> (((0 and 1) or (1 or 0)) and 1)
1
>>> (((0 and (1 or 1)) or 0) and 1)
0
としても同じ