以下是问题: 使用 for循环,编写一个名为 getMax4 的函数,其中包含一个数字列表。它确定返回 最大数字可被4整除。 如果参数是空列表,则函数返回-999。如果参数列表中的数字不能被4整除,则该函数返回0。 下面显示了在python shell中调用函数时的示例输出:
我的代码:
# What im trying to do is e.g. let's say:
List=[1,2,3]
maximum=List[0]
for num in List:
if num > maximum:
maximum = num
print(maximum)
通过执行for循环,它首先与List [0]进行比较,List [0]为1,列表中为“1”。将1与1进行比较后,没有差异,因此max仍为1.现在它移动到第二次迭代,maximum = List [0](列表中为1),现在与列表中的2进行比较。现在2高于最大值,因此它将新的最大值更新为2.(对不起英语不好) 所以问题是,当我尝试使用空集时,它会使我的索引超出范围。
另一个问题是当我输入样本输出中给出的值时,我得到的全部是0.
List=[]
def getMax4 (List):
highest=List[0]
for num in List:
if num % 4 == 0:
if num > highest:
highest = num
return highest
elif num == [] :
return -999
else:
return 0
答案 0 :(得分:0)
您的第一个问题是highest = List[0]
。由于List
不保证至少有一个项目,如果List
为空,则会出错。你应该添加一张支票:
def getMax4(List):
if not List: # or if len(List) == 0:
return -999
...
另一个问题是您将highest
定义为第一项。为什么?只有当它可以被4整除时,第一项才可能是最高的。您应该将其设置为0
,这样即使没有可被4整除的数字,它仍将具有示例中所需的默认值0
。
下一个问题是你要在循环内返回。等到循环完成后再尝试返回。
我们解决了所有这些问题后,问题是-4
优于0
,即使它更低。我们只需添加not highest
支票(highest
等于0
)。新代码如下所示:
def getMax4(List):
if not List:
return -999
highest = 0
for num in List:
if num % 4 == 0 and (num > highest or not highest):
highest = num
return highest
答案 1 :(得分:0)
关于您的第二段代码,您需要注意您的退货地点。 return语句将使用值退出函数。因此,这些检查应该在循环之前和之后完成,因为你的函数要求它遍历整个列表。
我不太喜欢将你的初始值设置为可能是有效输出的东西。因此,这是我的代码,在没有当前最大值的情况下我使用None
。但是,由于预期为0,因此需要额外检查。
def getMax4(lst):
if not lst:
return -999
highest = None
for num in lst:
if num % 4 == 0 and (highest is None or num > highest):
highest = num
return 0 if highest is None else highest
>>> getMax4([])
-999
>>> getMax4([1, 3, 9])
0
>>> getMax4([-4, 3, -12, -8, 13])
-4
>>> getMax4([1, 16, 18, 12])
16
>>> getMax4([-4, 0, -8])
0
在最后一个例子中,0是最大值,如果0不应该被计为可被4整除的有效最大值,那么if语句需要一个额外的条件。