Python 长度为2的字符串的索引1超出范围?

Python 长度为2的字符串的索引1超出范围?,python,string,indexing,index-error,Python,String,Indexing,Index Error,我正在使用Python,试图解决Euler项目的第17道问题,将每个数字中的字母数相加到1000 我已经编写了将每个数字转换成字符串的代码,并系统地计算出每个数字包含多少个字母,这段代码并不吸引人,但它是我的。以下是我遇到问题的具体部分: if len(n)==2: print(n,n[1]) if n[0]=="0": n=n[1] if n[1]=="0&qu

我正在使用Python,试图解决Euler项目的第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=""
那个print语句是用来告诉我代码要读什么的。它在1到100之间工作得很好,然后当它尝试101时,如果n[1]==0,则第23行出现错误:表示字符串索引超出范围,但print函数返回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,你的代码和Euler项目的问题17有什么关系?你将如何从13->13得到长度为8的13?啊,当然!我的问题是if语句直接跟在后面,我必须将它改为elif。非常感谢。