K. Файловая статистика 2.0

Напишите программу, которая для заданного файла вычисляет следующие параметры:

  • количество всех чисел;
  • количество положительных чисел;
  • минимальное число;
  • максимальное число;
  • сумма всех чисел;
  • среднее арифметическое всех чисел с точностью до двух знаков после запятой.

Формат ввода

Пользователь вводит два имени файла.
Первый файл содержит произвольное количество чисел, разделённых пробелами и символами перевода строки

Формат вывода

Выведите статистику во второй файл в формате JSON.

Ключи значений задайте соответственно:

  • count — количество всех чисел;
  • positive_count — количество положительных чисел;
  • min — минимальное число;
  • max — максимальное число;
  • sum — сумма всех чисел;
  • average — среднее арифметическое всех чисел с точностью до двух знаков после запятой.

Пример

Ввод

# Пользовательский ввод:
numbers.txt
statistics.json

# Содержимое файла numbers.txt
1 2 3 4 5
-5 -4 -3 -2 -1
10 20
20 10

Вывод

# Содержимое файла statistics.json
{
    "count": 14,
    "positive_count": 9,
    "min": -5,
    "max": 20,
    "sum": 60,
    "average": 4.29
}

Решение

Задача на вывод словаря с помощью json.dump(). Читаем данные удобным способом, создаем словарь и заполняем его нужными значениями. Выводим словарь в json-файл.

Посмотреть код

Решение

Python
import json

file_in = input().strip()
file_out = input().strip()

with open(file_in, encoding="UTF-8") as file:
    numbers = [int(number) for number in file.read().split()]

stat = {
    "count": (length := len(numbers)),
    "positive_count": len([number for number in numbers if number > 0]),
    "min": min(numbers),
    "max": max(numbers),
    "sum": (total := sum(numbers)),
    "average": round(total / length, 2),
}

with open(file_out, "w", encoding="UTF-8") as file:
    json.dump(stat, file, ensure_ascii=False, indent=4)
Подписаться
Уведомить о
guest
5 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Smotri
Smotri
11.12.2024 09:23

Подскажите в чём ошибка
import json

lst = []
dct = {}
file_1 = input().strip()
file_2 = input().strip()

with open(file_1, mode=‘r’, encoding=‘UTF-8’) as file_in:
    for line in file_in:
        sline = line.rstrip(‘\n’)
        for numb in sline:
            lst.append(int(numb))

dct[‘count’] = len(lst)
dct[‘positive_count’] = len([for x in lst if x > 0])
dct[‘min’] = min(lst)
dct[‘max’] = max(lst)
dct[‘sum’] = sum(lst)
dct[‘average’] = round(dct[‘sum’] / dct[‘count’], 2)

with open(file_2, mode=‘w’, encoding=‘UTF-8’) as file_out:
    json.dump(dct, file_out, ensure_ascii=False, indent=4)

Smotri
Smotri
Ответить на  Сергей Клочко
12.12.2024 15:37

Самое любопытное, что я этот код тестил на текстовых файликах(пример ввода -> пример вывода с точностью до символа), он работал корректно) почему так?

Smotri
Smotri
Ответить на  Сергей Клочко
13.12.2024 12:12

Да действительно, долго думая над “почему оно вообще работает” нашёл упущенный split() после попытки оптимизировать код =) Не вовремя отвлёкся видимо, спасибо вам за всю ясность в моей голове ☺