我对代码感到困惑如下:
def findMin(alist):
overallmin=alist[0]
for i in alist:
issmallest=True
for j in alist:
if i>j:
issmallest=False
if issmallest:
overallmin = i
return overallmin
我无法理解:为什么作者设置" issmallest = True"低于第一个for循环?通常当我们想要使用类似这种情况的布尔值时(例如在代码开头将boolean值赋值给变量或将布尔值作为if语句条件)?谢谢!
答案 0 :(得分:1)
好的,首先,要消除代码中的一些错误,一个有效的例子就是:
def findMin(alist):
overallmin=alist[0]
for i in alist:
issmallest=True
for j in alist:
if i>j:
issmallest=False
if issmallest:
overallmin = i
return overallmin
此代码背后的想法是将列表中的所有元素与所有其他元素进行比较,并保留比所有其他元素小的元素。因此,在循环中,假设当前元素是最小的issmallest = True
,直到找到较小的元素。如果找到较小的值,则最小值的值将更改为False。因此,如果在与所有其他人进行比较之后,最小值仍为真,那么该元素确实是最小的,因此也是固定的。
您可以简化此代码,因为一旦找到最小元素就无需进一步比较,即您可以离开该函数。同样在该算法中,不需要为最小元素保持变量。相应的代码可能会读取如下内容:
def findMin(alist):
for current_el in alist:
issmallest = True
for other_el in alist:
if other_el < current_el:
issmallest = False
if issmallest:
return current_el
但是:即使对于初学者来说,这也不是一个找到最低要求的好代码。我可以说这是我自己的初学者。通过列表一次,使用手边的元素,比较它,并始终保持最小,这是更清洁。 因此,即使价格低廉,您也可以编写更快的算法:
def findMin(alist):
smallest_el = alist.pop() # take out an element, no need to compare with itself
for other_el in alist:
if other_el < smallest_el:
smallest_el = other_el
return smallest_el
答案 1 :(得分:0)
while的条件总是必须评估为布尔值。如果它的计算结果为true,则循环继续,否则循环后的语句将被执行。请注意:您的问题中的代码不涉及while循环。这段代码非常糟糕,请忘记它,以及随附的所有内容。要学习,请尝试:https://www.learnpython.org/。