0

我正在尝试制作一些东西来计算某个范围内有多少个数字加起来是一个数字。例如,有多少个 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)

我认为这应该可行,但是我不断收到IndexError: list index out of rangea = test[n] 行的错误

这是什么原因造成的?

谢谢 :)

4

4 回答 4

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
于 2013-10-22T20:57:15.317 回答
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]raise的值IndexError

此外,作为旁注,巨大的ifs 块可以简化为:

cow = range(10 ** (number1 - 1), 10 ** number1)
于 2013-10-22T20:55:37.633 回答
2

在这种情况下避免 IndexError 的最佳方法是不使用索引。如果您想遍历“测试”列表中的每个项目,只需使用 for 循环:

for a in test:
    a = str(a)

    ...

更简单,更容易阅读,更不容易出错。

于 2013-10-22T21:13:28.253 回答
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.txt 中的元素更高的索引。

于 2013-10-22T20:58:22.793 回答