2014-11-05 48 views
0

每當我嘗試運行此代碼時,出現錯誤「字符串索引超出範圍」。
然而,這是它輸出後:錯誤:字符串索引超出範圍

[820.34] 
['Joint'] 
[820.34, 0] 
['Joint', 'Joint'] 

我不爲什麼它給了我一個字符串錯誤,因爲我的函數計算的參數是列表(收入[i]和狀態[1])。對不起,長代碼,但一些幫助將不勝感激!根據要求

infile=open("data.txt",'r') 
a=infile.readline() 
Name=[] 
status=[] 
income=[] 
while(len(a)>0): 
    Fname,Lname,statuses,incomes=a.split() 
    Name.append(Fname+ ' '+ Lname) 
    status.append(statuses) 
    income.append(incomes) 
    a=infile.readline() 
a=range(len(income)) 



taxes=0 
taxes_s=0 
taxes_j=0 
tax=[] 
Status=[] 

def calculations(income,status,Status,tax,taxes): 
    if status=="S" or status=="s": 
     if float(income)<0: 
      pass 
     elif float(income)<1710: 
      taxes_s=0 
     elif float(income)<20930: 
      taxes_s=87 + .03*(float(income)-1710) 
     elif float(income)<28790: 
      taxes_s=742.40 + .08*(float(income)-20930) 
     elif float(income)>=28790: 
      taxes_s=1449.60 + .11*(float(income)-28790) 
     taxes_j=0 
     status="Single" 


    elif status=="J" or status=="j": 
     if float(income)<0: 
      pass 
     elif float(income)<3420: 
      taxes_j=0 
     elif float(income)<47120: 
      taxes_j=330 + .04*(float(income)-3420) 
     elif float(income)<57580: 
      taxes_j=1905.40 + .09*(float(income)-47120) 
     elif float(income)>=57580: 
      taxes_j=2899.20 + .11*(float(income)-57580) 
     taxes_s=0 
     status="Joint" 

    else: 
     pass 
    global taxes_j 
    global taxes_s 
    if taxes_j==0: 
     net=float(income)-taxes_s 
     taxes=taxes_s 
    elif taxes_s==0: 
     net=float(income)-taxes_j 
     taxes=taxes_j 
    Status.append(status) 
    tax.append(taxes) 
    return Status,income,net,tax 

for i in a: 
    Status,income,net,tax=calculations(income[i],status[i],Status,tax,taxes) 
    print(tax) 
    print(Status) 

輸入數據:

Joe Smith J 15678.50 
Joseph Kardian j 539590.00 
Bill Jones X 8976.0 
Nancy Brown j -9087.0 
Marty Klauss S 3390.58 
Ali Hakimi s 675890.0 
George Karlton J 67534.50 
+0

歡迎來到SO。你必須學習如何調試。在python中,這是通過'print'完成的。儘可能多地打印你需要的變量,以便了解發生了什麼。這是第一步。 – 2014-11-05 07:17:44

+0

你能提供輸入文件數據嗎? – jack 2014-11-05 07:23:01

回答

2

的問題是在這裏

for i in a: 
    Status,income,net,tax=calculations(income[i],status[i],Status,tax,taxes) 
    print(tax) 
    print(Status) 

Realpce有:

for i in a: 
    Status,income1,net,tax=calculations(income[i],status[i],Status,tax,taxes) 
    print(tax) 
    print(Status) 

您正在使用收入分配d ata,這是取代收入清單,導致錯誤作爲索引超出範圍,給出唯一的名稱,以避免這種錯誤

+0

是的,謝謝你,我被永遠卡住了! – 2014-11-05 07:42:22

+0

乾杯!!!! ...... – jack 2014-11-05 07:48:05