我一直收到IndexError: string index out of range
,并且想知道我在代码中做错了什么。
inFile=open('pa7.cards','r')
cardnum=inFile.readline().strip()
def main():
while cardnum!='99999':
Step1(cardnum)
def CheckLen(num):
if len(num)>=13 and len(num)<=16:
return True
else:
return False
def Step1(num):
total=0
for i in range(len(num)-2,0,-2):
if eval(num[i]*2)>=10:
i=eval(num[i])*2
i=str(i)
i=eval(i[0])+eval(i[1])
total+=i
else:
total+=i
return total
def Step2(num):
total=0
for i in range(len(num)-1,0,-2):
total+=i
return total
def Step3(num):
total=Step1(num)+Step2(num)
if total%10==0:
return True
else:
return False
##def DetermineType(num):
main()
这是输入文件的样子:
4388576018402626
4388576018410707
37271983
99999
这是错误:
Traceback (most recent call last):
File "C:/Users/Andrew/Desktop/pa7.py", line 47, in <module>
main()
File "C:/Users/Andrew/Desktop/pa7.py", line 18, in main
Step1(cardnum)
File "C:/Users/Andrew/Desktop/pa7.py", line 30, in Step1
i=eval(i[0])+eval(i[1])
IndexError: string index out of range
答案 0 :(得分:1)
你在那里做了一些坏事 TM 。
您的错误来源是option
是通过从您的&#34;数字字符串&#34;中取一个数字来构建的,将其加倍并将其转换回字符串(因此i
变为"8"
"16"
)。
然后您尝试访问i[1]
- 如果i
只有1个字符,则会超出范围。
但是还有更多问题 - 在i
循环中重用名称for
,使用eval()
(shudder!)int()
将执行此操作,使用字符串迭代range()
代替切片...
例如,
for i in range(len(num)-2,0,-2):
应该是
for digit in num[-2:0:-2]:
答案 1 :(得分:0)
def Step1(num):
total=0
for digit in num[-2:0:-2]:
digit=int(digit)
if int(num[digit])*2>=10:
x=int(num[digit])*2
x1=str(x)
x2=int(x1[0])+int(x1[1])
total+=x2
else:
x=int((num[digit]))
total+=x
return total