来自代码战争的问题 它返回 5 而不是 23 .有人可以帮助我理解我的代码吗?

  • 本文关键字:代码 帮助 问题 战争 返回 python
  • 更新时间 :
  • 英文 :


问题

如果我们列出所有低于 10的 3 或 5 倍数的自然数,我们得到 3、5、6 和 9。这些倍数的总是 23。

完成解决方案,使其return传入数字下方所有 3 或 5 的倍数之和。

注意:如果数字是 3 和 5 的倍数,则只计数一次。

代码

def solution(number): 
return sum( (i%3==0 or i%5==0) for i in range (number))
solution(10)

这个问题要求你对 3 或 5 的倍数的数字求和,但这里你对(i%3==0 or i%5==0)的结果求和,这是一个布尔值(在 Python 中等于整数 0 和 1)。

这意味着你只是在计算3 和 5 的倍数,而不是对它们求和。这可以通过在 Python shell 中本地运行函数来轻松检查:你会得到 5(因为range从 0 开始(包括 0),所以虽然 0 对总和无关紧要,但它对计数很重要)。

生成器理解是"返回的值[对于]值[在]生产者[如果]条件"。作为条件,您的测试需要在最后进行。

基本上你是在对布尔值求和,这就是为什么你的答案不正确,请尝试以下代码

法典:

def solution(number): 
return sum( i for i in range (number) if (i%3==0 or i%5==0))
solution(10)

在循环的每次迭代中,您都在评估条件

(i%3==0 or i%5==0)

number是 10 时,正好是 True 的五倍。 每个True算作一个1,因此你得到5的总和。

要获得正确答案,您需要重新排列语句,以便在条件为真时评估i。有关更多详细信息,请参阅列表推导式。

最新更新