首页 > 解决方案 > 请有人就代码格式提出建议

问题描述

我最初必须编写代码将 3 行写入一个名为output.txt. 第一行显示第一行的最小数量,第二行将显示第二行的最大数量,第三行将显示第三行的平均值。无论输入什么数字或长度,它仍然会显示所有最小值、最大值和平均值。问题是代码仅将最后一个平均行写入输出文本文件。

我的讲师希望格式保持不变,但他有以下评论:

minmax未写入输出文件。这是因为您没有将值写入report_line变量,该变量存储要写入输出文件的字符串。

在 for 循环开始之前尝试初始化report_line为空字符串。

然后,您可以在每次重复 for 循环时使用+=运算符和换行符将输出存储在变量中。report_line

我尝试了它们,但我仍然得到相同的结果。仅打印平均线。

outfile = open("output.txt", "w")

with open("input.txt") as f:
    report_line = ""
    for line in f:
        operator, data =  line.lower().strip().split(":")
        line = line.split(":")
        operator = line[0].lower().strip()
        data = line[1].strip().split(",")
        newData = []
    for x in data:
        report_line+='n'
        newData.append(int(x))
        if operator == "min":
            result = min(newData)
        elif operator == "max":
            result = max(newData)
        elif operator == "avg":
            result = sum(newData) / len(newData)
            report_line = "The {} of {} is {}.\n".format(operator, newData, result)

outfile.write(report_line)

outfile.close()

输入:

min:1,2,3,4,5,6
max:1,2,3,4,5,6
avg:1,2,3,4,5,6

输出应该是:

The min of [1, 2, 3, 5, 6] is 1.
The max of [1, 2, 3, 5, 6] is 6.
The avg of [1, 2, 3, 5, 6] is 3.4.

标签: pythonfor-loopexternal-data-source

解决方案


根据讲师的评论,确保将所有report_line更改更改为+=. using=覆盖现有值,丢弃任何先前的输出。特别是,这一行:

report_line += "The {} of {} is {}.\n".format(operator, newData, result)
#           ^

您需要为最小最大情况添加额外report_line += ...的语句。您正在计算值,但没有将它们添加到.report_line

或者取消缩进report_line += ...上面的行,这样它就不会嵌套在avg案例中。如果您取消缩进,那么它将适用于所有三种情况。

此外,\n用于换行符。更改report_line+='n'为:

report_line+='\n'

推荐阅读