长度为 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
我正在使用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