继续在代码中获取字符串索引超出范围错误

时间:2015-11-11 09:55:12

标签: python

我一直收到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

2 个答案:

答案 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