假设包含一系列整数的文件名为numbers.txt并存在于计算机磁盘上。编写一个程序,读取存储在文件中的所有数字并计算它们的总数。
该程序没有给出任何错误,但我收到了错误的总数。我得到5,750,884.00,应该得到284.00
这是我到目前为止所提出的:
def main():
# Accumulator.
total=0.0
try:
# Open the file
infile = open('numbers.txt', 'r')
#read the values from the file and accumulate them.
for line in infile:
amount = float(line)
total+=amount
# Close the file.
infile.close()
except exception as error:
print(err)
else:
# Print the total.
print(format(total,',.2f'))
main()
答案 0 :(得分:1)
The iPhone And Shipadvertise iPad Has Gone Out Of Stock
答案 1 :(得分:0)
使用with
语法管理文件关闭,并使用sum
函数添加项目(使用生成器表达式)
try:
with open('numbers.txt', 'r') as num_file:
total = sum(float(l) for l in num_file)
print('{:.2f}'.format(total))
except OSError as error:
print('Error! (', error, ')')
except ValueError:
print('File does not contain valid data')
答案 2 :(得分:0)
由于您使用的是Python 3(可能是CPython),因此绝对最快的解决方案是:
with open('numbers.txt') as f:
total = sum(map(float, f))
在CPython中,它将所有工作推送到C层(无论文件大小,执行的字节码数量相同),并流式传输文件(因此峰值内存使用量不随文件大小增加)
总结float
时,您可能需要更高的准确性,Python提供math.fsum
:
import math
with open('numbers.txt') as f:
total = math.fsum(map(float, f))
它稍慢(没有意义;可能慢了2%,给予或接受),但作为交换,它不会受到额外的精度损失,float
s的一般求和会产生由于存储了具有渐进舍入误差的部分和。