我正在尝试制作能够计算某个范围内的数字加起来的数字的东西。例如,有多少2位数字包含最多为17的整数(89为其中之一)。
这是我的代码:
import math
print "Hey, lets solve Task 4 :)"
number1 = input ("How many digits do you want to look at? ")
number2 = input ("What would you like the digits to add up to? ")
final = []
if number1 == 1:
cow = range(0,10)
elif number1 == 2:
cow = range(10,100)
elif number1 == 3:
cow = range(100,1000)
elif number1 == 4:
cow = range(1000,10000)
elif number1 == 5:
cow = range(10000,100000)
elif number1 == 6:
cow = range(100000,1000000)
elif number1 == 7:
cow = range(1000000,10000000)
elif number1 == 8:
cow = range(10000000,100000000)
elif number1 == 9:
cow = range(100000000,1000000000)
elif number1 == 10:
cow = range(1000000000,10000000000)
number3 = cow[-1] + 1
number10 = number3 - 1
test = range(1,number10)
n = 0
while n < number3:
a = test[n]
a = str(a)
number4 = sum(int(x) for x in a)
if number4 == number2:
final.append(number4)
n = n + 1
print len(final)
我认为这应该有效,但是我一直收到a = test [n]
行的错误IndexError: list index out of range
造成这种情况的原因是什么?
谢谢:)
答案 0 :(得分:4)
你正在使用不良范围
number3 = 10
number10 = 10 -1 = 9
test = range(1,9) # 1,2,3,4,5,6,7,8 #notice how many variables there are
if 9 < number3:
test[9] # error
答案 1 :(得分:3)
当您尝试访问列表中没有的列表中的元素时,会引发IndexError: list index out of range
异常;即清单比你想象的要小;例如:
>>> lst = [1, 2, 3]
>>> lst[0] # OK
>>> lst[1] # OK
>>> lst[2] # OK
>>> lst[3] # element 3, i.e. 4th element, doesn't exist in the list
...
IndeError: list index out of range
所以基本上你需要分析并可能调试你的算法/代码,看看为什么n
的值达到导致test[n]
引发IndexError
的值。
另外,作为旁注,if
的大块可以简化为:
cow = range(10 ** (number1 - 1), 10 ** number1)
答案 2 :(得分:2)
在这种情况下避免IndexError的最佳方法是不使用索引。如果要迭代“测试”列表中的每个项目,只需使用for循环:
for a in test:
a = str(a)
...
更简单,更易于阅读,并且不易出错。
答案 3 :(得分:1)
问题在于此代码:
number3 = cow[-1] + 1
number10 = number3 - 1
test = range(1,number10)
n = 0
while n < number3:
a = test[n]
a = str(a)
n = n + 1
问题是test
列表的长度等于number10-2
。你循环到n == number10
。这意味着在您的while循环结束时,您将尝试访问test[number10]
,但您的test
列表只有number10-2
个元素,因此您获得了IndexError
。
我不知道你要做什么,所以我不确定如何解决它,但是你需要确保你没有索引test
的索引比索引更高在`test。