你计算两次15(= 3 * 5)的倍数.
你的代码应该是
for i in range(n):
if i % 3 == 0:
sum1 += i
elif i % 5 == 0:
sum1 += i
请注意elif而不是if.
或者:
for i in range(n):
if i % 3 == 0 or i % 5 == 0:
sum1 += i
或直接(如DeepSpace在评论中建议的那样)
sum1 = sum(i for i in range(n) if i % 3 == 0 or i % 5 == 0)
请注意,根本不需要循环:知道从1到(和包括)n的整数之和
def sum_to(n):
return ((n+1)*n)//2
你可以从:
sum1 = 5 * sum_to((n-1)//5) + 3 * sum_to((n-1)//3) - 15 * sum_to((n-1)//15)
(这可以推广并使其更漂亮……但我确信你会以这种形式得到这个想法).