列表中的int的Python舍入错误(列表包含整数和字符串)

时间:2015-04-28 02:37:06

标签: python-2.7 rounding-error

我有一个python(2.7)脚本,它读取包含如下文本设置的输入文件:

steve 83 67 77

脚本平均每个名称对应的数字,并返回每个名称的列表,其中包含人名和平均值,例如返回输出如下所示:

steve 75

然而,“史蒂夫”的实际平均值是“75.66666667”。因此,我希望返回值为76,而不是75(也就是我希望它舍入到最接近的整数)。我不知道如何完成这件事......这是我的代码:

filename = raw_input('Enter a filename: ')
file=open(filename,"r")
line = file.readline()
students=[] 
while line != "":
    splitedline=line.split(" ")
    average=0
    for i in range(len(splitedline)-1) :
        average+=int(splitedline[i+1])
    average=average/(len(splitedline)-1)
    students.append([splitedline[0],average])
    line = file.readline() 

for v in students:
        print " ".join(map(str, v))
file.close()

1 个答案:

答案 0 :(得分:0)

虽然您的代码非常混乱并且应该整体改进,但问题的解决方案应该很简单:

average=average/(len(splitedline)-1)

应该是:

average /= float(len(splitedline) - 1)
average = int(round(average))

默认情况下,Python 2.x /有两个整数地板划分。您必须明确地将其中一个参数设置为浮点数才能获得实际除法。然后你必须对结果进行舍入并将其转回整数。

在Python 3中,地板划分为//,常规划分为/。您可以使用from __future__ import division在Python 2中获得此行为。