【问题标题】:List and maximum numbers列表和最大数量
【发布时间】:2016-07-30 16:49:05
【问题描述】:

这是一个问题: 使用 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] 与 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

【问题讨论】:

  • 您似乎忘记了提问。我们只有你的任务和你的代码。没有关于你对该代码做什么,或者当你运行它时会发生什么。或者您希望我们为此提供什么帮助。
  • 我使用翼翼。如何附上照片?
  • 您遇到的问题是因为一旦找到可整除的数字,您就会立即返回highest。相反,在 for 循环外用 0、return highest 初始化 highest,并检查 List 是否为空(在 for 循环外),而不是数字。
  • @L3viathan 你能给我看看你是怎么做的吗?
  • @Heehweicheng 一旦你编辑你的问题,包括你有什么问题,以及你试图解决的问题。

标签: python python-3.x


【解决方案1】:

您的第一个问题是highest = List[0]。由于List 不能保证至少有一项,因此如果List 为空,则会出现错误。你应该添加一个检查:

def getMax4(List):
    if not List: # or if len(List) == 0:
        return -999
    ...

另一个问题是您将highest 定义为第一项。为什么?只有当它可以被四整除时,第一项才可能是最高的。您应该将其设置为0,这样即使没有可被四整除的数字,它仍将具有示例中所需的默认值0

下一个问题是你在循环内部返回。等到循环完成后再尝试返回。

一旦我们解决了所有这些问题,问题是-40 更好,即使它更低。我们可以简单地为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

【讨论】:

  • 感谢您的明确解释!我现在完全理解我应该使用 len() 函数检查列表中有多少元素。幸运的是,我在今天的课“and”和“or”中学习了逻辑运算符,如果没有,我将无法理解您所说的。
  • 但我不明白 not List 是什么意思。我想我不明白“不”的作用。
  • 假设你有True。与此相反,not TrueFalse。同样,not FalseTrue。好吧,不仅仅是TrueFalse 有布尔对立面。在某种程度上,空字符串相当于False。因此,not ""True。同样,not []True,但not [1]not [3, 6] 等是False。换句话说,if not Listif len(List) == 0 的一种奇特方式。请看stackoverflow.com/q/53513/5827958
【解决方案2】:

关于您的第二段代码,您需要注意退货的位置。 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 语句需要一个额外的条件。

【讨论】:

    猜你喜欢
    • 2018-03-09
    • 2021-08-13
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 2013-02-10
    • 2021-10-07
    • 1970-01-01
    • 2022-11-30
    相关资源
    最近更新 更多