Пожалуйста, кто-то может посоветовать формат кода - PullRequest
0 голосов
/ 07 февраля 2020

Изначально мне нужно было написать код для записи 3 строк во внешний текстовый файл с именем output.txt. Первая строка показывает минимальный номер первой строки, вторая строка показывает максимальный номер второй строки, а третья строка показывает среднее значение третьей строки. Независимо от того, какие числа введены или длина, он все равно будет показывать все значения мин, макс и среднее. Проблема в том, что код записывает только последнюю среднюю строку в выходной текстовый файл.

Мой лектор хотел бы, чтобы формат остался прежним, но у него были следующие комментарии:

Строки min и max не записываются в выходной файл. Это связано с тем, что вы не записываете значения в переменную report_line, в которой хранится строка для записи в выходной файл.

Попробуйте инициализировать report_line пустой строкой до начала цикла for.

Затем вы можете использовать оператор += и символы новой строки для сохранения вывода в переменной report_line при каждом повторении для l oop.

Я попробовал их но я все равно получаю тот же результат. Печатается только строка avg.

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.

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

В соответствии с комментарием вашего лектора, обязательно измените все report_line изменения на +=. использование = перезаписывает существующее значение, отбрасывая все предыдущие выходные данные. В частности, эта строка:

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

Вам потребуется добавить дополнительные операторы report_line += ... для случаев min и max . Вы вычисляете значения, но не добавляете их к report_line.

Или пропустите строку report_line += ... выше, чтобы она не была вложена в корпус avg . Если вы удалите его, тогда он будет применяться ко всем трем случаям.

Кроме того, используйте \n для перевода строки. Измените report_line+='n' на:

report_line+='\n'
0 голосов
/ 07 февраля 2020

Вы перезаписываете свой report_line в строке 20. Измените = на += вместо

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

Вы также хотите сделать отступ для for x in data l oop, так как вы ' В настоящее время используется только последний оператор, т.е. Вы хотите выполнить расчет для каждой строки в ваших данных

и, возможно, захотите удалить эту строку, поскольку вы уже добавляете новые строки в своем отчете report_line

report_line+='n'

Фиксированный код будет быть

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:
            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()
...