-1

我必须编写一个程序,从文件中读取数字列表,然后输出平均值。如果我的文件包含 3 45 83 21 我的程序将输出: 38 我知道如何创建文件:

myFile = open('average', 'wt')
myFile.write('3\n')
myFile.write('45\n')
myFile.write('83\n')
myFile.write('21\n')
myFile.close()

这一点有效,但我不知道如何做第二部分。

4

2 回答 2

0
with open('average', 'wt') as myFile:
    myFile.write('3\n')
    myFile.write('45\n')
    myFile.write('83\n')
    myFile.write('21\n')

使用 拆分数字字符串str.split,然后转换为 int。将所有数字相加,除以:

with open('average', 'rt') as myFile:
    numbers = map(int, myFile.read().split())
    print(sum(numbers, 0.0) / len(numbers))

如果文件很大,上面会导致问题(占用太多内存)。在这种情况下,请使用以下(逐行处理):

with open('average', 'rt') as myFile:
    total, n = 0, 0
    for line in myFile:
        total += int(line)
        n += 1
    print(float(total) / n)
于 2013-09-12T14:02:32.797 回答
0

这段代码应该做你想做的事。

numbers = [int(f.strip()) for f in open("average").readlines()]
print(sum(numbers)/float(len(numbers)))

它使用列表推导来构建文件中所有数字的列表,它用于从strip()行中删除换行符\n,然后int()将数字转换为整数(此时,数字仍然是一个字符串)。读取文件本身,使用readlines()它输出文件中所有行的列表。

最后,它打印列表中所有数字的总和除以列表的长度(给出所有数字的平均值)。

于 2013-09-12T14:03:50.453 回答