【问题标题】:How to find a even number using a for loop contains n1 to n2如何使用包含 n1 到 n2 的 for 循环查找偶数
【发布时间】:2021-12-02 15:26:34
【问题描述】:

我没有做对。为什么我的函数 even_numbers 会出现 AssertionError?

def even_numbers(n1, n2):
    (n1, n2) = [-2, 4]
    for num in range(n1, n2 + 0):
        
        if num % 2 == 0:
            print(num, end = " ") 

n1, n2 = [-2, 4]
assert even_numbers(-2, 4) == [-2, 0, 2]
---------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
    <ipython-input-19-6544d23ef931> in <module>
          1 # Q6 Test Cases
    ----> 2 assert even_numbers(-2, 4) == [-2, 0, 2]
    
    AssertionError

【问题讨论】:

  • 你的函数没有返回任何东西。打印与返回不是一回事。
  • 我投票结束这个问题,因为它表明没有研究工作。
  • @BenKovitz:有可能,但我不太确定。恕我直言,这可能更像是一个初学者的问题,他们对搜索什么来解决他们的问题没有想法。我会在友好和欢迎初学者方面犯错。
  • @Benkovitz 谢谢,我没有任何编码或计算机科学背景,只是想学习
  • @Hemanth 为了提出更好的问题,请告诉我们以下内容:到目前为止您尝试了哪些想法、查看了哪些文档以及您正在尝试做什么。

标签: python python-3.x jupyter-notebook


【解决方案1】:

代码中有一些错误。

首先,该函数通过分配[-2, 4] 覆盖参数n1, n2(可能是一些调试的剩余部分?)

其次,如 cmets 中所述,该函数充分过滤偶数,然后打印它们,并且不返回任何内容。

您想返回一个包含所有偶数的list,因此您需要将它们收集到一个列表中,然后将其返回。

您可以按如下方式重构您的代码:

def even_numbers(n1, n2):
    return [num for num in range(n1, n2) if num % 2 == 0]

>>> even_numbers(-2, 4)
[-2, 0, 2]

assert even_numbers(-2, 4) == [-2, 0, 2]

注意这和你的代码是一样的,甚至是相同的顺序,但是变成了一个列表理解。

您还可以使代码更接近原始代码:

def even_numbers(n1, n2):
    res = []
    for num in range(n1, n2):
        if num % 2 == 0:
            res.append(num)
    return res

【讨论】:

  • 编写一个函数 even_numbers 使用 for 循环并输出一个列表,其中包含从 ?1 到 ?2 的所有偶数,并断言 even_numbers(-2, 4) == [-2, 0 , 2]
  • 是的。这正是上面的函数所做的。
  • 谢谢 Pierre,当我运行我的变量 even_numbers(-2, 4) 时,返回值为整数 = -2, 0, 2 但我需要它在运行时作为列表返回[-2, 0, 2] 我尝试将整数或元组转换为列表,但出现了太多我无法理解的错误。
  • 我不确定我是否遵循。这个答案中的任何一个功能有问题吗?
  • 您的解决方案非常感谢
【解决方案2】:

我首先注意到的是您没有从代码中返回任何内容。因此,当您想要返回一个列表时,您需要有一个并将值附加到它。

另外,为什么您在范围限制中添加了 +0?值将相同。您可能想要做的是减去 1,因为如果您不这样做,范围将从 -2 变为 3。

您可以这样做(尽量简化,以便您理解代码中的所有内容):

def even_numbers(n1, n2):
    even_numbers_list = []
    for number in range(n1, n2-1):
       if number % 2 == 0:
          even_numbers_list.append(number)
    return even_numbers_list

>>> even_numbers(-2, 4)
[-2, 0, 2]

我还建议您添加一些日志(或打印),以便您更好地了解代码的错误。任何问题都可以问;)

【讨论】:

  • 返回请求的值。它实际上什么都不做,因为它在函数范围内创建一个列表,然后附加到它,但从不返回它
  • 是的,我忘了添加return语句。所以在我编辑后现在应该很好了。感谢您的评论:)
猜你喜欢
  • 2014-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-01
  • 2021-04-20
  • 1970-01-01
  • 2018-10-16
  • 2021-10-08
相关资源
最近更新 更多