Pythonクイズの解答

cozeのPython日記 : クイズ

ある値がリストに含まれるかどうかを調べる関数findを次のように書きました。
(中略)
クイズ:ある数xはリストlsに必ず含まれています。そこで次のプログラムを実行したとき、”No”とプリントされることはあるでしょうか。もしあるなら、それはどのようなときですか?

いきなりcozeさんのところでクイズが出されている。関数の戻り値にもいろいろと気をつけなければなりませんね。

def find(x, ls):
for e in ls:
if e == x:
return e # みつけた
return False # みつからなかった
assert type(ls) is list
assert x in ls
if find(x, ls):
print "Yes"
else:
print "No"

if文は対象となるオブジェクトが0なのかそれ以外なのかを判断する命令であるので、find関数にて「0がリストに含まれるかどうか」を調べてしまうと、戻り値が0となってしまうので、結果としてif文ではelse側に処理が移り、Noがprintされてしまうことになる。