我想知道为什么下面的代码要求我们输入found = false,然后在if语句中找到= 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"
这是我(错误)的理解。如果item [0] == key(它确实),则if语句为true。所以它不应该在它打印项目后突破它吗?为什么我们需要found = false / true。
当你解释答案时,你可以用一个非常容易理解的定义解释它,因为我对这一切都是新手,太多的细节会导致我理解中的轻微崩溃。
答案 0 :(得分: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)
答案 1 :(得分:4)
尝试在没有找到行的情况下运行代码。您会注意到它具有以下输出:
die Katze
Value not in list
找到的变量用于确保仅在未找到值时才打印出“不在列表中的值”字符串。否则,每次都会打印出来。
答案 2 :(得分:1)
此代码:
if not found:
print "Value not in list"
如果你没有将found
设置为True
,那么将无效,如果你没有设置found
,它会在找到 时运行首先是False
(或其他一些假y值)。
答案 3 :(得分: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']
这将返回列表中以Cat。开头的所有列表。