2014-09-19 63 views
0

因此,我之前創建了一個代碼,提示用戶輸入5個不同的測試分數,然後將該列表保存到test.txt中。代碼工作非常棒! 這是我的代碼:從文件列表中獲得平均值

scorefile=open('test.txt','w') 

for count in range(5): 

    print('Please enter test scores') 

    score=input('Test score:') 

    scorefile.write(str(score)+'%' + '\n') 

scorefile.close() 

但是現在,我遇到了一個問題。我有代碼來讀取文件。它工作得很好!但是當我嘗試從列表中獲得平均值時,我一直得到的結果是0.0。我一直在閱讀關於python的書,瞭解如何完成這項工作,但是我現在認真地堅持下去。幫幫我? 這裏是我的代碼:

scorefile=open('test.txt', 'r') 

for line in scorefile: 

    print(line, end='') 

    score=scorefile 

average = sum(score)/5 

print('The test average is', average) 

scorefile.close() 
+0

請把你的示例代碼插入代碼塊。爲此,請選擇您的代碼並按下工具欄中的「{}」按鈕。 – 2014-09-19 02:35:24

回答

0

這條線,score=scorefile不會做你認爲它。事實上,它根本沒有任何用處。

也許你想:

with open('test.txt') as scorefile: 
    scores = [int(line.replace('%','')) for line in scorefile] 
    average = sum(scores)/len(scores) 
+0

它工作完美!非常感謝! – nanaquit 2014-09-22 17:00:51

0

score=scorefile文件描述符只是分配給score。它實際上不會讀取內容,並按照您的預期將它們分配給score變量。

您需要讀取文件中的行,去掉'%'字符,將每行轉換爲浮點數(因爲它們是我假設的百分比),將它們相加並取平均值。

像這樣:

with open('input') as in_file: 
    data = in_file.readlines() 
average = sum([float(a.strip('%')) for a in data])/len(data) 
print(average) 

[float(a.strip('%')) for a in data]是做速記符號(也稱爲列表理解):

a_list = [] 
for a in data: 
    a_list.append(float(a.strip('%')))