0

以下のコードで、if ステートメントに found = false を入れてから、found = true を入れなければならない理由が不思議です。

def findinList():
  list = [["Dog" , "der Hund"] , ["Cat" , "die Katze"] , ["Bird" , "der Vogel"]]
  key = "Cat"
  found = false
  for item in list:
    if item[0] == key:
      print item[1]
      found = true
      break
  if not found:
    print "Value not in list"

これは私の(誤解)理解です。if item[0] == key (それが行う) の場合、if ステートメントは true です。アイテムを印刷した後、それから抜け出すべきではありませんか?found = false/true が必要なのはなぜですか。

答えを説明するときは、非常にわかりやすい定義で説明してください。私はこれらすべてに慣れていないため、詳細が多すぎると私の理解に軽微なメルトダウンが発生します。

4

4 に答える 4

9

foundフラグが必要なのは、forループが終了すると、ループから抜け出したためにループが停止したのか、それともリスト全体をループしたためにループが自然に停止したのかを実際に判断できないためです。

実際、Python には、elseブロックを使用してこれを行うためのより優れた方法があり、少し理解しやすいかもしれません。

for item in list:
    if item[0] == key:
        print item[1]
        break
else:
    print "Value not in list"

ブロック内のコードは、単語が見つからない場合に発生するループから抜け出さelseない場合にのみ実行されます。break

また、ここにあるのは辞書ではありません。リストです。実際の辞書を使用したい場合があります。

words = {
    "dog": "der Hund",
    "cat": "die Katze",
    "bird": "der Vogel"
}

あなたのコードはよりシンプルになります:

key = 'dog'

if key in words:
    print words[key]
else:
    print "{} isn't in the dictionary".format(key)
于 2013-06-16T23:03:19.270 に答える
4

見つかった行なしでコードを実行してみてください。次の出力があることに気付くでしょう。

die Katze
Value not in list

見つかった変数は、値が見つからない場合にのみ「リストにない値」文字列が出力されるようにするために使用されます。そうしないと、毎回印刷されます。

于 2013-06-16T22:57:14.417 に答える
1

このコード:

 if not found:
    print "Value not in list"

foundに設定しなかった場合は機能しません。また、最初に (またはその他の false-y 値) に設定しなかった場合True、見つかったときに実行されます。foundFalse

于 2013-06-16T22:57:45.687 に答える
0

コードは、単語 Cat がリスト 'list' のいずれかのサブリストの最初の項目であるかどうかを検出しようとしています。これを行うには、最初に found = false を設定し、それが見つかるまで反復して、found = true に設定します。

Python では、ブール定数は true と false であり、true と false ではないため、これが機能するかどうかはわかりません。また、この問題を解決するには、次のようなより良いアプローチがいくつかあります。

catLists = [sub_list for sub_list in list if sub_list [0] == 'Cat']

これにより、List 内の Cat で始まるすべてのリストが返されます。

于 2013-06-16T22:58:48.563 に答える