3+5的倍数之和<100

2024-09-29 23:19:33 发布

您现在位置:Python中文网/ 问答频道 /正文

Jupyter笔记本的新功能是,计算此代码以返回值的总和,这些值是3和5的倍数,在我的列表范围1100中小于100。我有一种感觉,通过从等式中删除3和5,我正在截断代码。不确定如何/在何处包括该内容

print(list(range(1, 100)))
multiple35 = 0

for i in range (1, 100):
    if i % 15 == 0 and multiple35 <= 100:
        multiple35 += i
        print(multiple35)

我的打印行返回范围,加上小于100的3个正确倍数。但也打印150,这大于并应从结果中排除

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
15
45
90
150

谢谢你的帮助


Tags: 代码功能内容列表笔记本jupyterrangelist
3条回答

BUT ALSO prints 150, which is greater than and should be excluded from the result.

原因很简单。在添加(multiple35 += i)之前,您正在测试multiple35 <= 100。因此,首先打印总数,然后在下一轮测试中进行测试。因此,输出在大于100的第一次出现之后结束

顺便说一句,遍历所有自然数并只对每个第15个元素执行任何操作都是无用的(因为i % 15 == 0)。您可以改为使用定制范围:

>>> list(range(15,100,15))
[15, 30, 45, 60, 75, 90]

因此,一个简化的循环将在达到100时停止打印,可以如下所示:

multiple35 = 0
for i in range (15, 100, 15):
    multiple35 += i
    if multiple35 > 100:
        break  # no reason to continue the loop, the sum will never go back below 100
    print(multiple35)

您必须检查最终目标是否会超过阈值,因为在您的循环中,i=75时,它满足条件75%15==0,并且也满足75<=100并且由于它同时满足这两个条件,因此我们将其放入下一个块中,该块将其加上75,并给出超过阈值的150。解决方案是,如果添加时超过阈值,则添加部分中甚至不允许有数字

@Melebius有上面提到的更简单的解决方案,但我想用OP写的方式来解释这一点

multiple35 = 0

for i in range (1, 100):
    if i % 15 == 0 and multiple35+i<=100:
        multiple35 += i
        print(multiple35)

你的逻辑有多重缺陷。我不打算把所有问题都解决,而是提出一种解决问题的替代方法

请注意,3和5的倍数正好是15的倍数。因此,不需要在0到100之间的所有数字上设置范围

for x in range(15, 100, 15):
    print(x)

# 15
# 30
# 45
# 60
# 75
# 90

您还提到要对所有数字求和。在python中,可以使用sum对任何迭代器求和,包括range

print(sum(range(15, 100, 15)))

# 315

相关问题 更多 >

    热门问题