2014-09-19 71 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('%')))