我一直在尝试编写一个解决以下问题的程序:
如果我们列出10以下的所有自然数是3或5的倍数,我们得到3,5,6和9.这些倍数的总和是23.
查找低于1000的3或5的所有倍数的总和。
为了解决这个问题,我想我可能会编写一个函数,列出所有3的倍数。我希望它将我的列表称为“3”,并将最后一个数字乘以3.然后添加该数字回到列表中。然后重复它直到达到1000.(或在这种情况下,999)
当我尝试运行它时,错误消息让我感到困惑。该计划有什么问题?
null
以下是错误消息:
three = [3, ]
def multiples_of_three():
while (three != 999):
high = (max(three))
multiplied_three = (int(high *3))
next_number_three = (multiplied_three, )
three.append("next_number_three")
multiples_of_three()
print (three)
答案 0 :(得分:1)
从"next_number_three"
左右删除引号。
答案 1 :(得分:1)
这是另一种选择,我认为这种方式更具可读性:
def get_multiples(multiple, maximum):
return [i for i in range(multiple, maximum, multiple)] # return all multiples in a list
def get_sum_of_multiples(multiples, maximums):
all_multiples = set() # empty set
for multiple, maximum in zip(multiples, maximums): # Iterate through the multiples and maximums
current_multiples = get_multiples(multiple, maximum)
for num in current_multiples:
all_multiples.add(num) # We add the multiples to a set because it will remove duplicates for us
return sum(all_multiples) # return the sum of them all
multiples = [3, 5]
maximums = [1000, 1000]
print(get_sum_of_multiples(multiples, maximums))
此外,我们可以使该功能更通用,并用它来解决你的例子,这可能是这样的:
{{1}}
答案 2 :(得分:0)
请注意,我知道您可能需要使用特定技术将其写为家庭作业,但这里有一种更加抒情的方式:
multiples_of_three_or_five = [i for i in range(1,1000) if i % 3 == 0 or i % 5 == 0]
print sum(multiples_of_three_or_five)
或者你可以超级想象,只是笔和纸数学;)
编辑:花式数学:
将从1到N的整数求和得到N *(N + 1)/ 2。
将3的倍数加到1000以下,得到3 * 332 * 333/2。
将5的倍数加到1000以下得到5 * 199 * 200/2
现在,只是添加这两个数字就会给出错误的答案,因为你要重复计算那些3 和 5的倍数。但这些数字恰好是15的倍数,所以我们减去那些。我们检查1000/15 = 66.something,所以66 * 15仍然低于1000,所以我们减去
15 * 66 * 67/2
因此最终答案是232169