对于Project Euler,question #1:
如果我们列出10以下的所有自然数是3或5的倍数,我们得到3,5,6和9.这些倍数的总和是23.
查找低于1000的3或5的所有倍数的总和。
我正在尝试使用Python,我有以下代码:
def findNums():
numsToAdd = []
num = 1
while num < 999:
if 3 % num == 0 or 5 % num == 0:
numsToAdd.extend([num])
num +=1
#print(num) optional
for i in numsToAdd:
lastNum = 0
addition = numsToAdd[i] + lastNum
lastNum = numsToAdd[i]
print(lastNum)
findNums()
但是当我尝试运行它时出现以下错误:
addition = numsToAdd [i] + lastNum
IndexError:列表索引超出范围
有人可以告诉我这是什么以及如何解决它?
答案 0 :(得分:2)
你有几个问题:
if 3 % num == 0 or 5 % num == 0:
你的条件是落后的。你现在如何设置它,你正在检查3或5是否可以被num
整除,而不是num
可以被3或5整除。
for i in numsToAdd:
假设到达此点时numsToAdd
具有以下值:[100, 500]
。
当你到达addition = numsToAdd[i] + lastNum
时,你会说:
addition = numsToAdd[100] + lastNum
和
addition = numsToAdd[500] + lastNum
没有第100或第500个元素。相反,您可以删除索引(以保留现有格式):
addition = i + lastNum
您也可以这样做,将列表中的所有值添加到一行:
sum(numsToAdd)
这可以替换整个for
循环。
最后,您的第一个while
错了:
查找低于1000的3或5的所有倍数的总和。
您正在检查低于999的所有内容。更改while
循环:
while num < 1000:
答案 1 :(得分:0)
您的代码存在的问题是,您的列表numsToAdd
中只有465个项目。
而不是:
numsToAdd[0]
numsToAdd[1]
numsToAdd[2]
.
.
numsToAdd[462]
numsToAdd[463]
numsToAdd[464]
你这样做:
numsToAdd[3]
numsToAdd[5]
numsToAdd[6]
.
.
numsToAdd[459]
numsToAdd[460]
numsToAdd[462]
发生错误是因为列表索引超出范围!没有numsToAdd[465]
!