我必须为我的类创建一个程序来读取文件,将其中的数字列表转换为浮点数,然后将它们全部加在一起并仅将答案打印到屏幕上。
我得到的最远的是:
fname = sys.argv[1]
handle = open(fname, "r")
total = 0
for line in handle:
linearr = line.split()
for item in linearr:
item = float(item)
其中一个文件如下:
0.13 10.2 15.8193
0.09 99.6
100.1
100.2 17.8 56.33 12
19e-2 7.5
尝试将转换后的列表添加到总计(总计+ =项目)无效。我真的输了,非常感谢任何帮助。
答案 0 :(得分:1)
你快到了。 total += item
是正确的方法,在转换为浮动后将该行添加到for
循环中。
请务必使用print(total)
打印结果,您可能也忘了这一点。
对于您的测试文件,这给我的结果是419.9593
答案 1 :(得分:1)
您可以将生成器表达式与sum
一起使用,将行拆分为列表并将每个子元素转换为float:
In [9]: cat test.txt
0.13 10.2 15.8193
0.09 99.6
100.1
100.2 17.8 56.33 12
19e-2 7.5
In [10]: with open("test.txt") as f:
sm = sum(float(s) for row in map(str.split, f) for s in row)
....:
In [11]: sm
Out[11]: 419.9593
您还可以与itertools.chain
合并以展平行:
In [1]: from itertools import chain
In [2]: with open("test.txt") as f:
sm = sum(map(float, chain(*(map(str.split,f)))))
...:
In [3]: sm
Out[3]: 419.9593
在旁注中,您应始终使用with
打开文件,它会自动为您关闭文件。