数字之和蟒蛇

时间:2015-12-16 18:31:00

标签: python python-3.x

  

假设包含一系列整数的文件名为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()    

3 个答案:

答案 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的一般求和会产生由于存储了具有渐进舍入误差的部分和。