输入文本Python制作循环的最小,最大平均

时间:2018-10-25 05:10:57

标签: python python-3.x

我对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()的工作,但是他们希望以一种通用的方式来做,这样行就无关紧要了。他们希望我用循环语句通读各行,检查第一个单词,然后使该单词开始操作。

我希望我已经正确解决了这个问题。

致谢

2 个答案:

答案 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