我对Python还是很陌生,并且正忙于进行新兵训练营,我必须完成的任务之一就是让我有些困惑。它们给出的输入txt文件如下所示:
min:1,2,3,4,5,6 max:1,2,3,4,5,6 avg:1,2,3,4,5,6
任务是我必须在程序中打开txt文件,然后计算出每一行的最小值,最大值和平均值。我可以做很长一段.readlines()
的工作,但是他们希望以一种通用的方式来做,这样行就无关紧要了。他们希望我用循环语句通读各行,检查第一个单词,然后使该单词开始操作。
我希望我已经正确解决了这个问题。
致谢
答案 0 :(得分:0)
虽然您的问题与如何使用readlines并不完全清楚,也许这正是您想要的。
f=open("store.txt","r")
for i in f.readlines():
func,data=i.split(":")
data=[int(j) for j in data.rstrip('\n').split(",")]
print(func,end=":")
if(func=="max"):
print(max(data))
elif(func=="min"):
print(min(data))
else:
print(sum(data)/len(data))
下次,请尝试显示您的工作并询问特定的错误,即不是如何解决问题,而是如何更改解决方案以解决您面临的问题
答案 1 :(得分:0)
eval()
在这里可能有用。
要执行的数学运算的名称通常是文本文件中每行的第一个单词,其中一些是python关键字。因此,在将文件解析为数学表达式后,我发现仅使用python的eval函数对数字列表执行操作就很诱人。
注意:这是一种一次性解决方案,因为不建议在未知数据上使用eval
,但是在我们管理输入数据时,此方法是安全的。
avg
不是内置操作,因此我们可以使用lambda定义它(以及所有其他非内置操作)。
with open('input.txt', 'r') as f:
data = f.readlines()
clean = [d.strip('\n').split(':') for d in data]
lines = []
# define operations in input file that are not built-in functions
avg = lambda x: sum(x)/float(len(x)) # float for accurate calculation result
for i in clean:
lines.append([i[0], list(map(int, i[1].split(',')))])
for expr in lines:
info = '{}({})'.format(str(expr[0]), str(expr[1]))
print('{} = {}'.format(info, eval('{op}({d})'.format(op=expr[0],d=expr[1]))))
输出:
min([1, 2, 3, 4, 5, 6]) = 1
max([1, 2, 3, 4, 5, 6]) = 6
avg([1, 2, 3, 4, 5, 6]) = 3.5