长度为 2 的字符串的索引 1 越界?

Index 1 of string of length 2 out of bounds?

我正在使用Python,正在尝试欧拉计划第17题(将每个数字中的字母数相加为1000)。

我写过代码把每个数字变成一个字符串,系统地计算出每个数字包含多少个字母,这个代码没有吸引力,但它是我的。这是我遇到问题的具体部分:

if len(n)==2:
            print(n,n[1])
            if n[0]=="0":
                n=n[1]
            if n[1]=="0":
                if n[0]=="1":
                    cnt+=3
                    n=""

那个打印语句是为了告诉我代码试图读取什么。它在 1 到 100 之间完美运行,然后当它尝试 101 时,我在第 23 行 (if n[1]=="0":) 得到一个错误,说字符串索引超出范围,但是打印函数返回 01 1 这意味着它 能够找到该字符串的索引 1。

有什么想法吗?

这是完整代码,不是很吸引人,但这是我的。

def numletcount(t):
    n=str(t)
    cnt=0
    while len(n)>0:
        if n == "0":
            n=""
            
        if len(n)==1:
            if n == "1" or n == "2" or n == "6":
                cnt+=3
                n=""
            if n == "4" or n == "5" or n == "9":
                cnt+=4
                n=""
            if n == "3" or n == "7" or n == "8":
                cnt+=5
                n=""
                
        if len(n)==2:
            print(n,n[1])
            if n[0]=="0":
                n=n[1]
            if n[1]=="0":
                if n[0]=="1":
                    cnt+=3
                    n=""
                elif n[0] == "2" or n[0] == "3" or n[0] == "8" or n[0] == "9":
                    cnt+=6
                    n=""
                elif n[0] == "4" or n[0] == "5" or n[0] == "6":
                    cnt+=5
                    n=""
                elif n[-2] == "7":
                    cnt+=7
                    n=""
            else:
                if n[0]=="1":
                    if n[-1] == "1" or n[-1] == "2":
                        cnt+=6
                        n=""
                    elif n[-1] == "5" or n[-1] == "6":
                        cnt+=7
                        n=""
                    elif n[-1] == "3" or n[-1] == "4" or n[-1] == "8" or n[-1] == "9":
                        cnt+=8
                        n=""
                    elif n[-1] == "7":
                        cnt+=9
                        n=""
                elif n[0] == "2" or n[0] == "3" or n[0] == "8" or n[0] == "9":
                    cnt+=6
                    n=n[-1]
                elif n[0] == "4" or n[0] == "5" or n[0] == "6":
                    cnt+=5
                    n=n[-1]
                elif n[0] == "7":
                    cnt+=7
                    n=n[-1]
            
        if len(n)==3:
            if n[1:3] == "00":
                cnt+=7
                n=n[0]
            else:
                if n[0] == "1" or n[0] == "2" or n[0] == "6":
                    cnt+=13
                    n=n[1:3]
                elif n[0] == "4" or n[0] == "5" or n[0] == "9":
                    cnt+=14
                    n=n[1:3]
                elif n[0] == "3" or n[0] == "7" or n[0] == "8":
                    cnt+=15
                    n=n[1:3]
        if len(n)==4:
            cnt+=11
            n=n[1:4]
    print(t,cnt)
    return cnt

你说它打印01和1,所以n是01,n[0]==0。 现在你有

if n[0]=="0":
    n=n[1]

所以n现在是“1”,他的长度是1