ある値がリストに含まれるかどうかを調べる関数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されてしまうことになる。