这个程序应该把所有可以被3和5整除的数字并将它们全部加在一起,但我不明白,我试着运行这个脚本,它只是一直给我错误:
Traceback (most recent call last):
File "first.py", line 23, in <module>
main()
File "first.py", line 19, in main
merica = merica + good[count-1]
IndexError: list index out of range
我不明白这意味着什么,因为
count-1
是否在索引的范围内?
def main():
merica = 0
commonfactors = []
good = []
count = 1
while count <= 1000:
if count%3 == 0:
good.append(count)
elif count%5 == 0:
if count in good:
commonfactors.append(count)
else:
good.append(count)
count = count+1
count = count - 1000
while count <= 1000:
merica = merica + good[count-1]
count = count+1
print(merica)
main()
exit()
任何帮助都会非常感谢!
答案 0 :(得分:0)
整个块假定good
的长度不准确。
while count <= 1000:
merica = merica + good[count-1]
count = count+1
如果您只在其中放置子,则长度不能为1000.
无论如何,您应该了解内置的sum()
函数:
good = [1, 2, 3]
merica = sum(good)
您可能还会发现range()
功能也很有用:
for number in range(1000):
# This will loop 1000 times with number equal to 0 to 999.
这转变为代码审查......但你为什么要这样做:
count = count - 1000
而不只是设置count = 0
?
你也可以从一些更具防御性的风格编程中受益。了解如何使用assert
:
count = count - 1000
assert count == 0
和
assert count-1 < len(good)
merica = merica + good[count-1]
这些断言将帮助您快速跟踪您正在做出的假设。
祝你好运!答案 1 :(得分:0)
当计数为3或5(不是两者)的倍数时,您只需将数字附加到好。
所以,好的大小不会是1000。
这就是你收到错误的原因。
你的下面的循环只能运行到最高计数&lt; = 466。
def main():
merica = 0
commonfactors = []
good = []
count = 1
while count <= 1000:
if count%3 == 0:
good.append(count)
elif count%5 == 0:
if count in good:
commonfactors.append(count)
else:
good.append(count)
count = count+1
count = count - 1000
while count <= len(good):
merica = merica + good[count-1]
count = count+1
print(merica)
main()
exit()
答案 2 :(得分:0)
由于错误表明列表索引超出范围,因此请考虑列表的长度以及我们尝试使用的索引。在这里,假设列表good
中有1000个项目,因为while循环最多可达1000个。
while count <= 1000:
merica = merica + good[count-1]
count = count+1
好的,现在我们看到程序希望列表中有1000个项目。在构建列表时,让我们看看是否成立。
while count <= 1000:
if count%3 == 0:
good.append(count)
elif count%5 == 0:
if count in good:
commonfactors.append(count)
else:
good.append(count)
count = count+1
现在我们看到正在通过向值附加值来构造列表,其中值从1到1000.但是我们应用条件来追加它,也就是说,它必须可以被3或5整除。那么什么关于素数?没有else
块附加这些数字。因此,我们不会附加完整的1000个数字,但只追加可被5或3整除的数字。
解决方案是改变我们关于第二个while块中循环大小的假设。 while count <= len(good):
将根据列表的大小调整长度。