Практическая работа №7
Основные теоретические положения
Section titled “Основные теоретические положения”1. Объявление функции, параметры и возвращаемое значение
def classify_load(value, limit): if value >= limit: return "critical" return "normal"
print(classify_load(87, 80)) # criticalvalueиlimit— параметры, а87и80— аргументы.returnвозвращает вычисленный результат вызывающему коду.- Не смешивайте вычисление результата с его выводом на экран: функция анализа должна возвращать данные, а не печатать их.
2. Декомпозиция задачи
Одну задачу обработки файла удобно разделить на этапы:
main() ├── read_records(filename) → прочитать и проверить данные │ └── parse_record(line) → разобрать одну строку ├── analyze(records) → получить показатели ├── select_problematic(records)→ выбрать проблемные записи ├── build_report(...) → сформировать текст отчёта └── write_report(filename, text) → сохранить текстНазвания функций можно изменять под свой вариант. В программе должно быть не менее пяти осмысленных пользовательских функций, включая хотя бы две функции, которые получают данные через параметры и возвращают результат.
3. Обработка некорректной строки
def parse_number(text): value = int(text.strip()) if not 0 <= value <= 100: raise ValueError("Значение вне диапазона 0–100") return valueИспользование в цикле чтения:
lines = ["45", "abc", "101", "80"]
for line_number, line in enumerate(lines, start=1): try: number = parse_number(line) except ValueError as error: print(f"Строка {line_number}: {error}") continue
print("Корректное значение:", number)Чтение файла и проверку формата лучше разделять: первая функция управляет файлом, вторая — разбирает одну строку.
4. Возврат нескольких результатов
def summarize(values): if not values: return 0, None return len(values), sum(values) / len(values)
count, average = summarize([10, 20, 30])С помощью кортежа можно вернуть сразу несколько значений, например список корректных записей и список ошибок.
5. Формирование отчёта отдельно от анализа
def build_summary(total, critical): return f"Всего записей: {total}\nПроблемных: {critical}\n"
report = build_summary(12, 3)with open("report.txt", "w", encoding="utf-8") as file: file.write(report)6. Проверка функций с помощью assert
assert classify_load(80, 80) == "critical"assert classify_load(79, 80) == "normal"Если условие истинно, выполнение продолжается. Если ложно — возникает AssertionError. Проверяйте минимум две функции отдельно от работы с файлом.
Задания для выполнения
Section titled “Задания для выполнения”Часть 1. Исследование функций
Выполните задания 1.1–1.4 до перехода к своему варианту. Используйте отдельный файл study.py. Не переносите готовые решения из этой части в индивидуальную программу без необходимости.
Задание 1.1. Функция, параметры и return
Создайте функцию classify_cpu(value, limit), которая возвращает "critical", если загрузка не меньше порога, иначе "normal".
- Вызовите функцию со значениями
(85, 85),(84, 85)и(0, 85). - Объясните, почему для результата используется
return, а неprint()внутри функции.
Задание 1.2. Функция и коллекция
Создайте функцию get_critical(values, limit), возвращающую новый список значений, превышающих предел. Проверьте её на [40, 90, 85, 15, 100] при пороге 85.
- Исходный список изменяться не должен.
- Покажите, что получится для пустого списка.
Задание 1.3. Разделение обработки данных
Напишите parse_record(line), которая разбирает запись вида srv01;87 и возвращает (имя_узла, загрузка). Пустое имя, неправильное число полей и значение вне диапазона 0–100 должны приводить к ValueError.
Проверьте отдельно правильную запись и две некорректные. Объясните, почему удобно проверять одну запись в отдельной функции.
Задание 1.4. Декомпозиция и проверка функций
Составьте схему вызовов для программы, которая читает значения, вычисляет показатели и записывает отчёт. Добавьте минимум два выражения assert для функций из заданий 1.1–1.3.
Часть 2. Комплексное индивидуальное задание
Section titled “Часть 2. Комплексное индивидуальное задание”Вариант 1. Учёт сетевых узлов
Задача: разработать консольную утилиту «учёт сетевых узлов». Вход: hosts.txt. Выход: hosts_report.txt.
Входной формат: одна запись на строку, поля разделены символом ; (кроме конфигурации варианта 14). Пустые строки не являются записями и пропускаются без ошибки; если в варианте не указано иное, остальные некорректные строки считаются ошибками.
Программа должна:
- Нормализуйте имя узла (пробелы, регистр), разбейте строку на три поля. Пустое имя, неправильное число полей и повтор имени считайте ошибкой.
- Постройте словарь имя → (IP, тип) и посчитайте узлы каждого типа.
- Выделите все узлы типа
server, отсортируйте их по имени и определите их долю среди корректных записей в процентах. - В отчёте выведите все серверы с IP, статистику типов, количество корректных и ошибочных строк, номера ошибочных строк.
- Доработайте функцию поиска: пользователь вводит имя узла, программа возвращает его IP и тип или сообщает об отсутствии.
- Проверьте пустой файл, повтор имени с другим регистром и строку с лишним разделителем.
- Добавьте режим отбора по типу: пользователь вводит
server,router,printerили другой тип; выведите отсортированные записи найденного типа и число совпадений. Режим поиска по имени из п. 5 сохраните.
Исходные данные:
📄 Содержимое файла hosts.txt — раскрыть и скопировать
SRV01;192.168.1.10;serverpc-101;192.168.1.101;workstationsrv02;192.168.1.11;serverrouter01;192.168.1.1;routerbackup01;192.168.1.20;server;192.168.1.33;serversrv03;192.168.1.12;serverprinter01;192.168.1.50;printerinvalid-recordsrv02;192.168.1.99;serverpc-102;192.168.1.102;workstationswitch01;192.168.1.2;switchОжидаемый результат: при успешном запуске программа создаёт hosts_report.txt; в отчёте отдельно указаны число обработанных записей и ошибки исходных строк. Для проверки измените исходный файл и убедитесь, что данные отчёта пересчитываются, а не заданы вручную.
Вариант 2. Анализ загрузки процессоров
Задача: разработать консольную утилиту «анализ загрузки процессоров». Вход: cpu.txt. Выход: cpu_report.txt.
Входной формат: одна запись на строку, поля разделены символом ; (кроме конфигурации варианта 14). Пустые строки не являются записями и пропускаются без ошибки; если в варианте не указано иное, остальные некорректные строки считаются ошибками.
Программа должна:
- Разберите строки
узел;загрузка. Допустимые значения загрузки CPU — 0–100, ошибки записей фиксируйте по номерам, пустые строки пропускайте. - Для каждого узла соберите список всех его измерений и рассчитайте среднюю и максимальную загрузку.
- Критический узел — тот, у которого есть измерение ≥ 85. Выведите такие узлы в порядке убывания максимума, при равенстве — по имени.
- Рассчитайте среднюю загрузку по всем корректным измерениям, количество критических узлов и количество ошибок.
- Сформируйте текстовый отчёт с таблицей
узел — средняя — максимум — состояниеи итогами. - Проверьте варианты: все измерения ниже порога; узел с одним измерением; файл только с ошибками.
- Добавьте в отчёт три узла с наибольшей средней загрузкой. Если измерений меньше трёх, выведите все доступные; при равенстве средней сортируйте по имени.
Исходные данные:
📄 Содержимое файла cpu.txt — раскрыть и скопировать
srv01;45srv02;92db01;84srv01;78srv03;101router01;33srv02;88
pc01;errordb01;89srv04;0srv05;100srv06;67Ожидаемый результат: при успешном запуске программа создаёт cpu_report.txt; в отчёте отдельно указаны число обработанных записей и ошибки исходных строк. Для проверки измените исходный файл и убедитесь, что данные отчёта пересчитываются, а не заданы вручную.
Вариант 3. Анализ попыток входа
Задача: разработать консольную утилиту «анализ попыток входа». Вход: auth.txt. Выход: auth_report.txt.
Входной формат: одна запись на строку, поля разделены символом ; (кроме конфигурации варианта 14). Пустые строки не являются записями и пропускаются без ошибки; если в варианте не указано иное, остальные некорректные строки считаются ошибками.
Программа должна:
- Разберите поля
IP;пользователь;событие, допускайте толькоSUCCESSилиFAILED; форматные ошибки фиксируйте. - Подсчитайте успешные и неудачные входы и количество уникальных IP с ошибками.
- Постройте словарь количества неудачных попыток по IP и выделите IP с ≥ 2 отказами.
- Отсортируйте проблемные IP по убыванию числа отказов; при равенстве — по IP как строке.
- В отчёте отразите общие счётчики, список подозрительных IP, количество плохих строк и их номера.
- Проверьте файл только с успешными входами, неверным статусом и отсутствующим полем пользователя.
- Дополнительно сгруппируйте отказы по имени пользователя и найдите пользователя с наибольшим числом ошибок. При равенстве выбирайте имя по алфавиту.
Исходные данные:
📄 Содержимое файла auth.txt — раскрыть и скопировать
192.168.1.15;admin;FAILED192.168.1.20;student;SUCCESS192.168.1.15;admin;FAILED192.168.1.30;ivanov;FAILED192.168.1.20;student;FAILED192.168.1.15;guest;FAILED192.168.1.30;ivanov;SUCCESS192.168.1.40;root;FAILEDbad;data192.168.1.15;admin;UNKNOWN192.168.1.20;student;SUCCESSОжидаемый результат: при успешном запуске программа создаёт auth_report.txt; в отчёте отдельно указаны число обработанных записей и ошибки исходных строк. Для проверки измените исходный файл и убедитесь, что данные отчёта пересчитываются, а не заданы вручную.
Вариант 4. Контроль задержек сети
Задача: разработать консольную утилиту «контроль задержек сети». Вход: ping.txt. Выход: ping_report.txt.
Входной формат: одна запись на строку, поля разделены символом ; (кроме конфигурации варианта 14). Пустые строки не являются записями и пропускаются без ошибки; если в варианте не указано иное, остальные некорректные строки считаются ошибками.
Программа должна:
- Разберите
узел;время_мс:-1означает недоступность, 0–500 мс — успешный ответ; остальное — ошибка. - Подсчитайте доступные, недоступные измерения (не уникальные имена узлов) и процент недоступных от числа корректных записей.
- Вычислите среднее время только успешных ответов; предусмотрите отсутствие успешных ответов.
- Выделите узлы с задержкой более 80 мс, отсортируйте по убыванию времени.
- Сохраните детальный отчёт (обобщение, медленные узлы, номера некорректных строк).
- Проверьте файл из одних
-1, задержку ровно 80 и нечисловое значение. - Реализуйте изменяемый порог задержки: пользователь вводит целое число от 0 до 500, программа повторно строит список медленных узлов без повторного чтения исходного файла.
Исходные данные:
📄 Содержимое файла ping.txt — раскрыть и скопировать
srv01;15srv02;-1router01;21srv03;109srv04;87backup01;35printer01;-1db01;58srv05;abcsrv06;0srv07;105srv08;999Ожидаемый результат: при успешном запуске программа создаёт ping_report.txt; в отчёте отдельно указаны число обработанных записей и ошибки исходных строк. Для проверки измените исходный файл и убедитесь, что данные отчёта пересчитываются, а не заданы вручную.
Вариант 5. Проверка состояния служб
Задача: разработать консольную утилиту «проверка состояния служб». Вход: services.txt. Выход: services_report.txt.
Входной формат: одна запись на строку, поля разделены символом ; (кроме конфигурации варианта 14). Пустые строки не являются записями и пропускаются без ошибки; если в варианте не указано иное, остальные некорректные строки считаются ошибками.
Программа должна:
- Разберите
узел;служба;состояние: статусы —activeиinactive. Повтор парыузел + службасчитайте ошибкой. - Создайте словарь по узлам, где каждому узлу соответствует список его служб и их состояний.
- Подсчитайте активные и неактивные службы для каждого узла, а также общий итог.
- Выделите узлы с хотя бы одной неактивной службой; сортируйте их по убыванию количества неактивных служб.
- Сформируйте отчёт с детализацией по узлам и перечнем некорректных строк.
- Проверьте повтор записи, неизвестный статус и случай без неактивных служб.
- Добавьте поиск по имени службы: вывести все узлы, где указанная служба неактивна, и число таких узлов. Неопознанную службу обрабатывайте без ошибки.
Исходные данные:
📄 Содержимое файла services.txt — раскрыть и скопировать
srv01;ssh;activesrv01;nginx;inactivesrv01;cron;activesrv02;ssh;activesrv02;nginx;inactivedb01;postgresql;activedb01;backup;inactivesrv02;nginx;inactivebackup01;ssh;inactivebad;linesrv03;docker;activesrv03;nginx;brokenОжидаемый результат: при успешном запуске программа создаёт services_report.txt; в отчёте отдельно указаны число обработанных записей и ошибки исходных строк. Для проверки измените исходный файл и убедитесь, что данные отчёта пересчитываются, а не заданы вручную.
Вариант 6. Анализ заполнения дисков
Задача: разработать консольную утилиту «анализ заполнения дисков». Вход: disks.txt. Выход: disks_report.txt.
Входной формат: одна запись на строку, поля разделены символом ; (кроме конфигурации варианта 14). Пустые строки не являются записями и пропускаются без ошибки; если в варианте не указано иное, остальные некорректные строки считаются ошибками.
Программа должна:
- Разберите
узел;раздел;заполнение, значение в процентах 0–100. - Создайте перечень корректных разделов и сгруппируйте их по узлам.
- Отметьте критические разделы с заполнением ≥ 85 % и отсортируйте по убыванию процента, затем по имени узла.
- Для каждого узла определите максимальную загрузку раздела и подсчитайте число критических разделов.
- Сформируйте отчёт с общим числом разделов, критическим списком и номерами некорректных строк.
- Проверьте пороги 84/85, нечисловое значение и отсутствие критических разделов.
- Сформируйте дополнительную сводку по узлам: количество разделов, число критических разделов и максимум заполнения; выведите топ-3 узлов по максимальному заполнению.
Исходные данные:
📄 Содержимое файла disks.txt — раскрыть и скопировать
srv01;/;75srv01;/var;91srv02;/;86srv02;/home;48db01;/data;94backup01;/backup;82pc01;C:;67srv03;/;105db01;/logs;88printer01;/;abcsrv04;/;85srv05;/;0Ожидаемый результат: при успешном запуске программа создаёт disks_report.txt; в отчёте отдельно указаны число обработанных записей и ошибки исходных строк. Для проверки измените исходный файл и убедитесь, что данные отчёта пересчитываются, а не заданы вручную.
Вариант 7. Инвентаризация интерфейсов
Задача: разработать консольную утилиту «инвентаризация интерфейсов». Вход: interfaces.txt. Выход: interfaces_report.txt.
Входной формат: одна запись на строку, поля разделены символом ; (кроме конфигурации варианта 14). Пустые строки не являются записями и пропускаются без ошибки; если в варианте не указано иное, остальные некорректные строки считаются ошибками.
Программа должна:
- Разберите
узел;интерфейс;состояние. Допустимыup/down; повтор парыузел + интерфейс— ошибка. - Сформируйте словарь устройств с перечнями их интерфейсов.
- Подсчитайте все интерфейсы, число отключённых и долю отключённых в процентах.
- Выделите все узлы, у которых есть интерфейсы
down; отсортируйте по числу отключённых, затем по имени. - В отчёте укажите отключённые интерфейсы каждого узла и ошибки входных данных.
- Проверьте повтор, пустое имя интерфейса и случай, где все интерфейсы работают.
- Добавьте поиск интерфейсов по узлу: вывести отсортированные интерфейсы указанного устройства и число отключённых; если узел не найден — сообщение.
Исходные данные:
📄 Содержимое файла interfaces.txt — раскрыть и скопировать
srv01;eth0;upsrv01;eth1;downsrv02;eth0;upsrv02;eth1;downdb01;ens18;uprouter01;wan0;downrouter01;lan0;upsrv01;eth1;upprinter01;wlan0;downswitch01;port1;upsrv03;;upsrv04;eth0;unknownОжидаемый результат: при успешном запуске программа создаёт interfaces_report.txt; в отчёте отдельно указаны число обработанных записей и ошибки исходных строк. Для проверки измените исходный файл и убедитесь, что данные отчёта пересчитываются, а не заданы вручную.
Вариант 8. Анализ резервного копирования
Задача: разработать консольную утилиту «анализ резервного копирования». Вход: backups.txt. Выход: backup_report.txt.
Входной формат: одна запись на строку, поля разделены символом ; (кроме конфигурации варианта 14). Пустые строки не являются записями и пропускаются без ошибки; если в варианте не указано иное, остальные некорректные строки считаются ошибками.
Программа должна:
- Разберите
узел;результат;объём_МБ. ДопускайтеOKс положительным размером,FAILEDс нулём; остальные записи ошибочны. - Подсчитайте успешные и неудачные операции и суммарный объём успешных копий.
- Постройте статистику по узлам: сколько успешных и неудачных попыток было у каждого.
- Выделите узлы с хотя бы одной ошибкой, отсортируйте по числу неудач и по имени.
- Создайте отчёт с суммарным объёмом, статистикой по узлам и списком некорректных строк.
- Проверьте неверный статус,
OKс объёмом 0 и отсутствие неудачных копирований. - Рассчитайте для каждого узла долю неудачных операций в процентах от всех его попыток. Включите в отчёт узлы, у которых доля ошибок составляет не менее 50%.
Исходные данные:
📄 Содержимое файла backups.txt — раскрыть и скопировать
srv01;OK;240srv02;FAILED;0db01;OK;910srv01;OK;260backup01;FAILED;0db01;FAILED;0srv03;OK;130srv04;OK;abcsrv05;UNKNOWN;50srv02;FAILED;0srv06;OK;80srv07;OK;300Ожидаемый результат: при успешном запуске программа создаёт backup_report.txt; в отчёте отдельно указаны число обработанных записей и ошибки исходных строк. Для проверки измените исходный файл и убедитесь, что данные отчёта пересчитываются, а не заданы вручную.
Вариант 9. Проверка открытых портов
Задача: разработать консольную утилиту «проверка открытых портов». Вход: ports.txt. Выход: ports_report.txt.
Входной формат: одна запись на строку, поля разделены символом ; (кроме конфигурации варианта 14). Пустые строки не являются записями и пропускаются без ошибки; если в варианте не указано иное, остальные некорректные строки считаются ошибками.
Программа должна:
- Разберите
узел;порт;состояние: порт — целое 1–65535, статусopen/closed; повтор узла и порта считайте ошибкой. - Определите открытые и закрытые порты, а также количество открытых портов у каждого узла.
- Разделите открытые порты на диапазоны 1–1023 и 1024–65535.
- Выделите все узлы, у которых открыто не менее двух портов; отсортируйте по убыванию количества.
- Сформируйте отчёт с найденными узлами, количеством портов по диапазонам и ошибками.
- Проверьте порты 1/65535, повтор пары и нечисловой порт.
- Реализуйте поиск портов указанного узла: вывести открытые порты по возрастанию номера и число закрытых; при отсутствии узла вывести сообщение.
Исходные данные:
📄 Содержимое файла ports.txt — раскрыть и скопировать
srv01;22;opensrv01;80;opensrv01;443;closedsrv02;22;opensrv02;3306;opendb01;5432;openrouter01;8080;closedsrv03;0;opensrv04;70000;opensrv05;ssh;opensrv02;3306;opensrv06;53;closedОжидаемый результат: при успешном запуске программа создаёт ports_report.txt; в отчёте отдельно указаны число обработанных записей и ошибки исходных строк. Для проверки измените исходный файл и убедитесь, что данные отчёта пересчитываются, а не заданы вручную.
Вариант 10. Инвентаризация оборудования
Задача: разработать консольную утилиту «инвентаризация оборудования». Вход: inventory.txt. Выход: inventory_report.txt.
Входной формат: одна запись на строку, поля разделены символом ; (кроме конфигурации варианта 14). Пустые строки не являются записями и пропускаются без ошибки; если в варианте не указано иное, остальные некорректные строки считаются ошибками.
Программа должна:
- Разберите
инвентарный_номер;тип;аудитория. Непустые поля обязательны, номер должен быть уникальным. - Создайте словарь оборудования по инвентарному номеру.
- Подсчитайте количество устройств каждого типа и в каждой аудитории.
- Выделите аудитории с не менее тремя устройствами и отсортируйте по убыванию количества.
- В отчёте приведите общую статистику, список аудиторий, данные об ошибочных строках.
- Проверьте повтор номера, пустую аудиторию и файл с одной записью.
- Добавьте поиск оборудования в выбранной аудитории: пользователь вводит аудиторию, программа выводит отсортированные по инвентарному номеру записи и подсчёт по типам.
Исходные данные:
📄 Содержимое файла inventory.txt — раскрыть и скопировать
INV001;switch;A101INV002;router;A101INV003;pc;B204INV004;printer;B204INV005;server;S001INV006;server;S001INV007;pc;A101INV003;pc;B205INV008;switch;broken-recordINV009;router;A101INV010;pc;B204Ожидаемый результат: при успешном запуске программа создаёт inventory_report.txt; в отчёте отдельно указаны число обработанных записей и ошибки исходных строк. Для проверки измените исходный файл и убедитесь, что данные отчёта пересчитываются, а не заданы вручную.
Вариант 11. Контроль температуры оборудования
Задача: разработать консольную утилиту «контроль температуры оборудования». Вход: temperature.txt. Выход: temperature_report.txt.
Входной формат: одна запись на строку, поля разделены символом ; (кроме конфигурации варианта 14). Пустые строки не являются записями и пропускаются без ошибки; если в варианте не указано иное, остальные некорректные строки считаются ошибками.
Программа должна:
- Разберите
узел;температура(целое число 0–120 °C), пропускайте ошибочные строки. - Рассчитайте минимум, максимум и среднюю температуру по корректным записям.
- Выделите перегретые устройства при температуре ≥ 80 °C, отсортируйте по убыванию температуры.
- Создайте словарь
узел → температураи функцию поиска по имени. - В отчёте укажите перечень перегретых, итоги и номера невалидных строк.
- Проверьте граничное значение 80, пустой файл и отсутствие перегрева.
- Добавьте режим проверки произвольного порога от 0 до 120 °C: пользователь вводит порог и получает список устройств с температурой не ниже указанной.
Исходные данные:
📄 Содержимое файла temperature.txt — раскрыть и скопировать
srv01;42srv02;75db01;88router01;55srv03;91srv04;80printer01;38srv05;121srv06;errorbackup01;66db02;87srv07;0Ожидаемый результат: при успешном запуске программа создаёт temperature_report.txt; в отчёте отдельно указаны число обработанных записей и ошибки исходных строк. Для проверки измените исходный файл и убедитесь, что данные отчёта пересчитываются, а не заданы вручную.
Вариант 12. Проверка прав пользователей
Задача: разработать консольную утилиту «проверка прав пользователей». Вход: permissions.txt. Выход: permissions_report.txt.
Входной формат: одна запись на строку, поля разделены символом ; (кроме конфигурации варианта 14). Пустые строки не являются записями и пропускаются без ошибки; если в варианте не указано иное, остальные некорректные строки считаются ошибками.
Программа должна:
- Разберите
пользователь;роль;состояние. Ролиadmin,operator,user,guest; состоянияactive/inactive; повтор имени — ошибка. - Создайте словарь учётных записей и подсчитайте пользователей по ролям и состояниям.
- Выделите неактивных администраторов и всех активных гостей (две независимые группы риска).
- Отсортируйте итоговые списки по имени пользователя.
- В отчёте выведите обе группы риска, общие числа и номера ошибочных строк.
- Проверьте повтор имени, неизвестную роль и случай без пользователей группы риска.
- Добавьте поиск учётной записи по имени: вернуть роль и состояние. Отдельно посчитайте долю неактивных пользователей от общего числа корректных записей.
Исходные данные:
📄 Содержимое файла permissions.txt — раскрыть и скопировать
admin;admin;activestudent01;user;activeguest;guest;inactivepetrov;admin;activeivanov;user;inactiveroot;admin;inactiveoperator;operator;activestudent02;user;activeadmin;user;activestudent03;unknown;activetest;guest;inactivevisitor;guest;activeОжидаемый результат: при успешном запуске программа создаёт permissions_report.txt; в отчёте отдельно указаны число обработанных записей и ошибки исходных строк. Для проверки измените исходный файл и убедитесь, что данные отчёта пересчитываются, а не заданы вручную.
Вариант 13. Анализ уровней системного журнала
Задача: разработать консольную утилиту «анализ уровней системного журнала». Вход: events.txt. Выход: events_report.txt.
Входной формат: одна запись на строку, поля разделены символом ; (кроме конфигурации варианта 14). Пустые строки не являются записями и пропускаются без ошибки; если в варианте не указано иное, остальные некорректные строки считаются ошибками.
Программа должна:
- Разберите
время;уровень;сообщение, используяsplit(";", 2). Допустимые уровни:INFO,WARNING,ERROR,CRITICAL; проверять календарную дату пока не требуется. - Подсчитайте число событий каждого уровня и общее количество корректных записей.
- Выделите
ERRORиCRITICALкак важные события и определите их долю. - Сортируйте важные события по времени-строке ISO по возрастанию; при равном времени сохраняйте порядок появления.
- В отчёте отразите сводку по уровням, все важные события и перечень ошибочных строк.
- Проверьте неизвестный уровень, пустое сообщение и отсутствие важных событий.
- Реализуйте отбор по выбранному уровню журнала: пользователь вводит один из четырёх уровней, программа выводит события этого уровня по времени и количество записей.
Исходные данные:
📄 Содержимое файла events.txt — раскрыть и скопировать
2026-10-01T09:00;INFO;Service started2026-10-01T09:05;WARNING;High memory2026-10-01T09:10;ERROR;Disk full2026-10-01T09:15;INFO;Backup done2026-10-01T09:20;CRITICAL;Server unreachable2026-10-01T09:25;ERROR;Auth denied2026-10-01T09:30;WARNING;High CPUinvalid line2026-10-01T09:35;DEBUG;Unexpected value2026-10-01T09:40;INFO;Heartbeat2026-10-01T09:45;ERROR;Network timeoutОжидаемый результат: при успешном запуске программа создаёт events_report.txt; в отчёте отдельно указаны число обработанных записей и ошибки исходных строк. Для проверки измените исходный файл и убедитесь, что данные отчёта пересчитываются, а не заданы вручную.
Вариант 14. Разбор конфигурационного файла
Задача: разработать консольную утилиту «разбор конфигурационного файла». Вход: settings.conf. Выход: config_report.txt.
Входной формат: одна запись на строку, поля разделены символом ; (кроме конфигурации варианта 14). Пустые строки не являются записями и пропускаются без ошибки; если в варианте не указано иное, остальные некорректные строки считаются ошибками.
Программа должна:
- Создайте функцию разбора
ключ = значениес удалением пробелов; пропускайте пустые строки и строки, начинающиеся с#. - Не допускайте повторные ключи, строки без
=и пустые имена/значения; ошибки фиксируйте. - Соберите словарь настроек и выведите все пары в алфавитном порядке ключей.
- Для числовых параметров
port,timeout,retries,max_clientsпроверьте целое число и границы: порт 1–65535, остальные 0–10000. - Сформируйте отчёт с параметрами, их количеством и номерами ошибочных строк.
- Проверьте повтор ключа, параметр с двумя символами
=и файл только с комментариями. - Реализуйте поиск значения параметра: пользователь вводит имя ключа, программа выводит значение или сообщает об отсутствии; ошибочная строка не должна менять ранее принятую настройку.
Исходные данные:
📄 Содержимое файла settings.conf — раскрыть и скопировать
# Service settingshost = 192.168.1.10port = 8080
timeout = 30retries = 5debug = falseport = 9090no_equals_signempty =max_clients = 200log_level = warningОжидаемый результат: при успешном запуске программа создаёт config_report.txt; в отчёте отдельно указаны число обработанных записей и ошибки исходных строк. Для проверки измените исходный файл и убедитесь, что данные отчёта пересчитываются, а не заданы вручную.
Вариант 15. Учёт доступности серверов
Задача: разработать консольную утилиту «учёт доступности серверов». Вход: availability.txt. Выход: availability_report.txt.
Входной формат: одна запись на строку, поля разделены символом ; (кроме конфигурации варианта 14). Пустые строки не являются записями и пропускаются без ошибки; если в варианте не указано иное, остальные некорректные строки считаются ошибками.
Программа должна:
- Разберите
узел;время_работы_часов;состояние: время — неотрицательное целое, статусыonline/offline; дляofflineвремя должно быть 0. - Подсчитайте доступные и недоступные узлы и процент доступности.
- Для доступных узлов вычислите среднее и максимальное время работы.
- Выделите доступные узлы со временем работы ≥ 100 часов, сортируйте по убыванию часов.
- Сформируйте отчёт с общими итогами, длинноработающими узлами и номерами ошибок; при отсутствии
online-узлов среднее и максимум обозначьте как «нет данных». - Проверьте файл только с
offline, отрицательное время и неизвестный статус. - Добавьте поиск узлов по порогу времени работы: пользователь задаёт неотрицательное число часов, программа выводит все
online-узлы с временем не меньше порога, отсортированные по убыванию времени.
Исходные данные:
📄 Содержимое файла availability.txt — раскрыть и скопировать
srv01;120;onlinesrv02;0;offlinedb01;240;onlinebackup01;180;onlinerouter01;48;onlinesrv03;0;offlinesrv04;90;onlinesrv05;-2;onlinesrv06;100;unknowndb02;360;onlinesrv07;0;offlinesrv08;24;onlineОжидаемый результат: при успешном запуске программа создаёт availability_report.txt; в отчёте отдельно указаны число обработанных записей и ошибки исходных строк. Для проверки измените исходный файл и убедитесь, что данные отчёта пересчитываются, а не заданы вручную.
Требования к результату
Section titled “Требования к результату”- Создайте рабочую папку своего варианта, входной файл из условия и
main.py. - Реализуйте не менее пяти пользовательских функций (не считая вложенные выражения и вызовы стандартных функций). Обязательны: разбор записи, чтение/проверка файла, расчёт показателей, выборка по условию, формирование отчёта;
main()рекомендуется дополнительно. - Каждая функция должна выполнять преимущественно одну задачу. Передавайте данные параметрами, избегайте глобальных переменных.
- Программа должна корректно обработать пустые строки, ошибки формата и недопустимые значения, указанные для вашего варианта: не завершаться аварийно, а пропускать плохую запись и учитывать её в отчёте.
- Входной файл не изменять. Сохранить итог в отдельный файл, указанный в варианте, и вывести краткую сводку на экран.
- Для текстовых файлов использовать
with open(..., encoding="utf-8"); обрабатывать отсутствие входного файла (FileNotFoundError). - Отсортировать итоговую выборку по правилу своего варианта; при одинаковых значениях использовать указанное вторичное правило либо сортировку по имени/коду.
Минимальная структура сдаваемой работы
practice_07/├── main.py├── input.txt # название из вашего варианта├── report.txt # название из вашего варианта, создаёт программа└── test_cases.txt # три сценария проверки и ожидаемые результатыНазвания input.txt и report.txt в схеме условные. Используйте точные имена файлов из задания.
Условия приёмки: программа должна работать на неизменённых исходных данных и на двух изменённых наборах; ошибочные записи не приводят к аварийному завершению; пустой файл или отсутствие подходящих записей не вызывает деления на ноль; сортировка и пороговые сравнения должны соответствовать формулировке варианта. После изменения входных данных все показатели пересчитываются заново.
Контрольные вопросы
Section titled “Контрольные вопросы”- Для чего программе декомпозиция на функции?
- В чём разница между аргументом и параметром?
- Чем отличается
returnотprint()? - Как функция возвращает два результата?
- Почему удобнее передавать список/словарь параметром, чем использовать глобальную переменную?
- Как организовать отдельную проверку формата строки?
- Что означает «чистая функция»? Почему её легче тестировать?
- Для чего нужна функция
main()? - Как обработать файл, которого нет?
- Почему для пустого набора нужно отдельно обрабатывать среднее значение?
- Как проверить граничное значение порога?
- Зачем сохранять номера некорректных строк?
- Как проверить, что сортировка выполнена по двум критериям?
- В чём разница между тестированием одной функции и всей программы?
- Почему полезно разделять вычисления и построение текста отчёта?