列表和最大数字

时间:2016-07-30 16:49:05

标签: python python-3.x

以下是问题:     使用 for循环,编写一个名为 getMax4 函数,其中包含一个数字列表。它确定返回 最大数字可被4整除。     如果参数是空列表,则函数返回-999。如果参数列表中的数字不能被4整除,则该函数返回0。     下面显示了在python shell中调用函数时的示例输出:

This is the sample output

我的代码:

# 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

2 个答案:

答案 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语句需要一个额外的条件。