问题:
如果我们列出所有低于 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
。有关更多详细信息,请参阅列表推导式。