0

特定の範囲内の数字の合計が数字になる数をカウントするものを作成しようとしています。たとえば、合計が 17 になる整数を含む 2 桁の数はいくつありますか (89 はそのうちの 1 つです)。

これが私のコードです:

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 range、 a = 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]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 に答える