2012-03-29 84 views
0

提示用戶輸入一個文件,在本例中爲'histogram.txt'。該程序將獲取文本文件中的每個分數,並在文件中的所有分數中生成一個直方圖,對其進行組織,以便用戶可以查看每個分區有多少個分區。我寫了一個非常簡單的代碼:簡易python程序

filename = raw_input('Enter filename of grades: ') 

histogram10 = 0 
histogram9 = 0 
histogram8 = 0 
histogram7 = 0 
histogram6 = 0 
histogram5 = 0 
histogram4 = 0 
histogram3 = 0 
histogram2 = 0 
histogram1 = 0 
histogram0 = 0 

for score in open(filename): 
    if score >= 100: 
     histogram10 = histogram10 + 1 
    elif score >= 90: 
     histogram9 = histogram9 + 1 
    elif score >= 80: 
     histogram8 = histogram8 + 1 
    elif score >= 70: 
     histogram7 = histogram7 + 1 
    elif score >= 60: 
     histogram6 = histogram6 + 1 
    elif score >= 50: 
     histogram5 = histogram5 + 1 
    elif score >= 40: 
     histogram4 = histogram4 + 1 
    elif score >= 30: 
     histogram3 = histogram3 + 1 
    elif score >= 20: 
     histogram2 = histogram2 + 1 
    elif score >= 10: 
     histogram1 = histogram1 + 1 
    elif score >= 0: 
     histogram0 = histogram0 + 1 

print  
print 'Grade Distribution' 
print '------------------' 
print '100  :',('*' * histogram10) 
print '90 - 99 :',('*' * histogram9) 
print '80 - 89 :',('*' * histogram8) 
print '70 - 79 :',('*' * histogram7) 
print '60 - 69 :',('*' * histogram6) 
print '50 - 59 :',('*' * histogram5) 
print '40 - 49 :',('*' * histogram4) 
print '30 - 39 :',('*' * histogram3) 
print '20 - 29 :',('*' * histogram2) 
print '10 - 19 :',('*' * histogram1) 
print '00 - 09 :',('*' * histogram0) 

但是每當我運行的程序,全部二十檔次得到記錄到> = 100 這樣的:

100 : ******************** 
90-99 : 
80-89 : 

等 ...如何我是否做到這一點,以便程序將星星放在正確的地方?

+3

始終步驟1:確保進入程序的數據是正確的。 – 2012-03-29 05:14:44

+2

您正在比較字符串和數字... – avasal 2012-03-29 05:17:47

+1

小技巧:您可以使用列表並計算索引,例如, '直方圖[min(100,score)/ 10] + = 1'。 'min'將所有分數都放在100以上。對於更一般的數據,如計算文本中的單詞數量,可以使用字典。 – 2012-03-29 05:22:55

回答

2

您需要在比較之前將score轉換爲int。

score = int(score) # convert to int 
if score >= 100: 
    histogram10 = histogram10 + 1 
# other cases 

如果您在輸入文件中有空行,那麼您必須在轉換爲int之前添加必要的檢查。而不是十個不同的變量,你可以很容易地使用一個列表。

+0

謝謝你,我也很感謝你的建議。即使你不介意,你是否還可以解釋如何使用這個列表? – 2012-03-29 05:22:41

+1

請通過列表教程http://docs.python.org/tutorial/introduction.html#lists。對於'histogram0',你可以使用'l [0]',對於'histogram1'你可以使用'l [1]'等等。 – taskinoor 2012-03-29 05:27:47

4

從文件讀取的數據是一個字符串。將其轉換爲int()將其轉換爲整數。

>>> int('25') 
25 
+0

我真的很感謝你的幫助,謝謝。 – 2012-03-29 05:17:50

+0

如果有幫助,您應該接受答案。 – 2012-03-29 05:23:47