【发布时间】:2020-01-23 01:06:38
【问题描述】:
问题来了: 编写一个程序,计算并打印文本文件中数字的平均值。您应该使用两个高阶函数来简化设计。
程序输入输出示例如下:
输入输入文件名:numbers.txt
平均值为 69.83333333333333
这里是 numbers.txt 中的数字: 45 66 88 100 22 98
这是我的代码:
file = input("Enter the input file name: ")
with open(file) as f:
from functools import reduce
def add(x, y): return x + y
data = [45, 66, 88, 100, 22, 98]
total = reduce(add, data)
avg = total / len(data)
print("The average is: ", avg)
if __name__ == "__main__":
main()
问题是,当我在列表中手动输入项目时,这工作正常,但是当我添加 line.strip 函数并尝试将其放入列表中,然后使用 map 进行转换时,这是我的代码:
file = input("Enter the input file name: ")
with open(file) as f:
for line in f:
line = line.strip()
data = [line]
data = list(map(int, data))
from functools import reduce
def add(x, y): return x + y
total = reduce(add, data)
avg = total / len(data)
print("The average is: ", avg)
if __name__ == "__main__":
main()
我收到此错误:
Traceback (most recent call last):
File "average.py", line 15, in <module>
main()
File "average.py", line 7, in main
data = list(map(int, data))
ValueError: invalid literal for int() with base 10: '100 22 98'
我在编码方面很糟糕,请你帮我理解 1) 错误是什么 2) 列表没有将字符串转换为整数有问题吗?
谢谢!
【问题讨论】:
-
更改此行:
data = list(map(int, data))为data = list(map(int, data.split()))
标签: python-3.x string list replace integer