2013-11-02 74 views
-3

我希望我的程序看起來像這樣,但是當我運行程序時出現錯誤。我不知道我做錯了什麼,請幫助我。非常感謝。對不起我的英文不好Python:For循環使用索引而不是嵌套循環的2列輸出

雨量統計

Month   Total Rainfall 
-----   --------------- 
Jan     10 
Feb     20 
Mar     15 
Apr     5 
May     4 
Jun     5 
Jul     3 
Aug     2 
Sep     8 
Oct     7 
Nov     10 
Dec     12 

Total Rainfall:  96 
Average Rainfall: 8.0 

這是我的代碼:

amount = [] 
total = 0 

month = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'] 
for num in range(1,13): 
    am = int(raw_input("Enter amount of rainfall each month from Jan to Dec sequently: ")) 
    amount.append(am) 
    total+=am 

print "\nRainfall Statistics" 
print "Month\t\tTotal Rainfall" 
print "-----\t\t---------------" 

for index in month: 
    print month[index], "\t\t", amount[index] 

print "\ntotal rainfall: ", total 

average = total/12 
print "\nAverage rainfall: ",average 

這是我的輸出:

Enter amount of rainfall each month from Jan to Dec sequently: 1 
Enter amount of rainfall each month from Jan to Dec sequently: 2 
Enter amount of rainfall each month from Jan to Dec sequently: 3 
Enter amount of rainfall each month from Jan to Dec sequently: 4 
Enter amount of rainfall each month from Jan to Dec sequently: 5 
Enter amount of rainfall each month from Jan to Dec sequently: 6 
Enter amount of rainfall each month from Jan to Dec sequently: 7 
Enter amount of rainfall each month from Jan to Dec sequently: 8 
Enter amount of rainfall each month from Jan to Dec sequently: 9 
Enter amount of rainfall each month from Jan to Dec sequently: 10 
Enter amount of rainfall each month from Jan to Dec sequently: 11 
Enter amount of rainfall each month from Jan to Dec sequently: 12 

Rainfall Statistics 
Month  Total Rainfall 
-----  --------------- 

錯誤:

Traceback (most recent call last): 
    File "/Users/matter_neverdie/Desktop/python/rainFall.py", line 15, in <module> 
    print month[index], "\t\t", amount[index] 
TypeError: list indices must be integers, not str 
+0

'index'是一個字符串不是整數 – TerryA

+0

那麼,我應該修復哪條線? –

+0

謝謝大家的幫助:) –

回答

0

你的程序應該看起來有些類似於這

from itertools import izip 

amount = [] 
total = 0 

month = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'] 
idx = 0 
while(idx < len(month)): 
    am = int(raw_input("Enter amount of rainfall each month from Jan to Dec sequently: ")) 
    amount.append(am) 
    total+=am 
    idx+=1 

print "\nRainfall Statistics" 
print "Month\t\tTotal Rainfall" 
print "-----\t\t---------------" 

for each_month, month_amount in izip(month, amount): 
    print each_month, "\t\t", month_amount 

print "\nTotal rainfall: ", total 

average = total/12 
print "\nAverage rainfall: ",average 

當你使用Python中的for循環遍歷列表你得到的元素,而不是一些類似於C風格的for循環。

在迭代多個列表時,總是最好使用itertools模塊中存在的工具,如具有許多優點的izip,而不是遍歷一個列表並使用數字索引來遍歷另一個列表。

您還應該看看何時需要在Python中使用for循環和while循環。雖然他們可能在C語言中使用相同的目的,但他們可以用來在Python中完成不同的事情。這link可能會幫助您何時使用for循環以及何時使用while循環。

3

與其他一些JavaScript語言不同,Python會循環遍歷數組的元素而不是數組元素的索引。你的意思是有

for index in range(len(month)): 
+0

OMG !!!非常感謝。我修好了。 –

0

首先,在你輸入迴路,這將是更好的風格來寫 for num in range(12)這將環路12個TIEMS,給你的索引0..11。這比你的解決方案更受青睞,因爲你不必考慮你真正擁有的一切。

可以準確使用相同的理念,爲第二循環:

for index in range(12): 

會的工作,但你可以通過計算列表的長度,提高本(也許你想Ø有兩年以後,等)使用len()。 Threfore你應該寫

for index in range(len(month)): #or len(amount) 

在Python中,您還可以使用內置的enumerate得到單行列表索引和元素。 有了這個,你可以做到以下幾點:

for index, month in enumerate(month): 
    print month, "\t\t", amount[index] 

的最後一個例子是,也許不是你aseked在你的作業做什麼; O)...