Практическая работа №6
Цель работы: Научиться использовать основные коллекции Python — списки, кортежи, словари и множества — для хранения, поиска, фильтрации, сортировки и обработки данных, в том числе данных, связанных с компьютерными системами и сетями.
Основные теоретические положения
Section titled “Основные теоретические положения”1. Списки
Список (list) — изменяемая упорядоченная коллекция элементов.
loads = [45, 72, 88, 91, 67]Получение элемента:
print(loads[0])print(loads[-1])Добавление элемента:
loads.append(84)Изменение:
loads[0] = 50Удаление:
loads.remove(72)Количество элементов:
print(len(loads))Перебор:
for load in loads: print(load)2. Поиск, фильтрация и сортировка списков
Проверка наличия:
if 91 in loads: print("Значение найдено")Сортировка списка:
loads.sort()Создание отсортированной копии:
sorted_loads = sorted(loads)Фильтрация:
critical = []
for load in loads: if load > 80: critical.append(load)3. Кортежи
Кортеж (tuple) — упорядоченная неизменяемая коллекция.
server = ("srv01", "192.168.1.10", "online")Распаковка:
name, ip, status = server
print(name)print(ip)print(status)Кортежи удобно использовать для фиксированных наборов значений.
4. Словари
Словарь (dict) хранит пары ключ: значение.
servers = { "srv01": "192.168.1.10", "srv02": "192.168.1.11"}Получение значения:
print(servers["srv01"])Добавление или изменение:
servers["srv03"] = "192.168.1.12"Перебор:
for name, ip in servers.items(): print(name, ip)Проверка наличия ключа:
if "srv01" in servers: print("Узел существует")5. Множества
Множество (set) хранит уникальные элементы.
addresses = { "192.168.1.10", "192.168.1.11", "192.168.1.12"}Добавление:
addresses.add("192.168.1.13")Преобразование списка во множество автоматически удаляет повторы:
addresses = set([ "192.168.1.10", "192.168.1.10", "192.168.1.11"])
print(addresses)6. Операции над множествами
configured = {"srv01", "srv02", "srv03"}online = {"srv01", "srv03", "srv04"}Пересечение:
print(configured & online)Разность:
print(configured - online)Объединение:
print(configured | online)7. Комбинирование коллекций
Коллекции можно использовать совместно.
Например, список словарей:
servers = [ {"name": "srv01", "ip": "192.168.1.10", "status": "online"}, {"name": "srv02", "ip": "192.168.1.11", "status": "offline"}]Перебор:
for server in servers: print(server["name"], server["status"])Общие требования
Section titled “Общие требования”Для каждого задания необходимо:
- Определить входные и выходные данные.
- Составить алгоритм решения.
- При необходимости представить алгоритм в виде блок-схемы.
- Реализовать программу на языке Python.
- Использовать коллекцию, указанную в условии задания.
- Проверить программу минимум на трёх наборах данных.
- Объяснить преподавателю, почему выбран именно этот тип коллекции.
- В заданиях с файлами использовать уже изученные конструкции
with open(...),strip()иsplit(). - Не использовать пользовательские функции: они будут рассматриваться в следующей теме.
Задания для выполнения
Section titled “Задания для выполнения”Выбор варианта: Номер варианта соответствует порядковому номеру студента в списке группы. Если количество студентов превышает 15, варианты повторяются по кругу: 16-й студент выполняет вариант 1, 17-й — вариант 2 и т.д.
Вариант 1
Section titled “Вариант 1”| № | Тип задачи | Описание задачи |
|---|---|---|
| 1 | Список | Дан список значений загрузки CPU: [45, 72, 88, 91, 67, 53, 84]. Найдите среднее, минимальное и максимальное значения. Сформируйте новый список значений выше 80. |
| 2 | Словарь | Создайте словарь имя_узла: IP-адрес минимум для 5 узлов. Реализуйте поиск IP-адреса по введённому имени узла. |
| 3 | Множество + файл | Прочитайте IP-адреса из addresses.txt. Выведите количество строк, количество уникальных адресов и сами уникальные адреса. |
Содержимое файла addresses.txt:
192.168.1.10192.168.1.11192.168.1.10192.168.1.15192.168.1.20192.168.1.11192.168.1.25192.168.1.20Вариант 2
Section titled “Вариант 2”| № | Тип задачи | Описание задачи |
|---|---|---|
| 1 | Список | Пользователь вводит 8 значений свободного места на диске. Сохраните их в список, отсортируйте и выведите значения ниже заданного порога. |
| 2 | Словарь | Создайте словарь служба: состояние, например ssh: active. Выведите только службы со значением inactive. |
| 3 | Множества | Даны множества установленных и требуемых пакетов. Определите, какие пакеты необходимо установить, какие уже установлены и какие являются лишними. |
Используйте исходные данные:
installed = {"nginx", "python3", "git", "curl", "nano"}required = {"nginx", "python3", "git", "docker", "wget"}Вариант 3
Section titled “Вариант 3”| № | Тип задачи | Описание задачи |
|---|---|---|
| 1 | Список | Дан список времени ответа узлов. Значение -1 означает отсутствие ответа. Сформируйте список только положительных значений и найдите среднее время ответа. |
| 2 | Кортеж | Создайте кортеж (hostname, ip, status) и выполните распаковку его значений в отдельные переменные. |
| 3 | Словарь + файл | В hosts.txt строки имеют формат hostname ip. Сформируйте словарь hostname: ip и выведите его содержимое. |
Исходный список для задания 1:
responses = [15, 21, -1, 18, 46, -1, 31, 27, 104, 19]Содержимое файла hosts.txt:
srv01 192.168.1.10srv02 192.168.1.11router01 192.168.1.1printer01 192.168.1.50backup01 192.168.1.20Вариант 4
Section titled “Вариант 4”| № | Тип задачи | Описание задачи |
|---|---|---|
| 1 | Список | Дан список портов. Пользователь вводит номер порта. Определите, присутствует ли он в списке, и выведите его позицию, если он найден. |
| 2 | Множество | Дан список IP-адресов с повторениями. Преобразуйте его во множество и выведите уникальные адреса и их количество. |
| 3 | Словарь | Создайте словарь порт: служба и реализуйте поиск службы по введённому номеру порта. |
Используйте данные:
ports = [22, 80, 443, 53, 3306, 8080, 5432]
addresses = [ "192.168.1.10", "192.168.1.11", "192.168.1.10", "10.0.0.1", "192.168.1.11", "10.0.0.2"]Вариант 5
Section titled “Вариант 5”| № | Тип задачи | Описание задачи |
|---|---|---|
| 1 | Список | В списке находятся значения температуры оборудования. Найдите значения выше 70 и отсортируйте их по убыванию. |
| 2 | Словарь | Создайте словарь с количеством ошибок по IP-адресам. Выведите IP-адрес с наибольшим количеством ошибок. |
| 3 | Файл + коллекции | Прочитайте errors.log, где в каждой строке первым полем находится IP-адрес. Сформируйте список всех адресов и множество уникальных адресов. Выведите количество всех и уникальных адресов. |
Исходные данные для задания 1:
temperatures = [48, 67, 72, 81, 59, 77, 91, 64, 73]Содержимое файла errors.log:
192.168.1.15 ERROR authentication_failed192.168.1.20 ERROR timeout192.168.1.15 ERROR authentication_failed192.168.1.30 ERROR connection_refused192.168.1.15 ERROR permission_denied192.168.1.20 ERROR timeout192.168.1.40 ERROR disk_fullВариант 6
Section titled “Вариант 6”| № | Тип задачи | Описание задачи |
|---|---|---|
| 1 | Список | Пользователь вводит 10 чисел. Сохраните их в список, сформируйте новый список без отрицательных значений и выведите оба списка. |
| 2 | Кортежи | Создайте список из четырёх кортежей вида (hostname, ip, status) и выведите только узлы со статусом online. |
| 3 | Множества | Даны множества configured и online. Определите настроенные, но недоступные узлы; доступные, но отсутствующие в конфигурации; узлы, присутствующие в обоих множествах. |
Используйте данные:
configured = {"srv01", "srv02", "srv03", "srv04", "srv05"}online = {"srv01", "srv03", "srv05", "srv06"}Вариант 7
Section titled “Вариант 7”| № | Тип задачи | Описание задачи |
|---|---|---|
| 1 | Список | Дан список объёмов сетевого трафика. Определите сумму, среднее значение и три максимальных значения. |
| 2 | Словарь | Создайте словарь пользователь: количество_входов. Выведите пользователей, у которых количество входов больше заданного пользователем значения. |
| 3 | Файл + словарь | В users.txt строки имеют формат username role. Сформируйте словарь и выведите всех пользователей с ролью admin. |
Исходный список для задания 1:
traffic = [450, 780, 1200, 640, 980, 1500, 720, 2100, 860, 1100]Содержимое файла users.txt:
admin adminivanov userpetrov adminstudent useroperator operatorroot adminguest guestВариант 8
Section titled “Вариант 8”| № | Тип задачи | Описание задачи |
|---|---|---|
| 1 | Список | Дан список имён файлов. Сформируйте новый список только из файлов с расширением .log. |
| 2 | Множество | Создайте множества пользователей двух групп. Определите пользователей, входящих в обе группы, и пользователей, принадлежащих только первой группе. |
| 3 | Словарь | Создайте словарь имя_файла: размер. Выведите файл минимального и максимального размера. |
Используйте данные:
files = [ "auth.log", "config.txt", "access.log", "README.md", "system.log", "hosts.conf"]
group1 = {"admin", "ivanov", "petrov", "student"}group2 = {"petrov", "student", "operator", "guest"}Вариант 9
Section titled “Вариант 9”| № | Тип задачи | Описание задачи |
|---|---|---|
| 1 | Список | Дан список состояний узлов. Подсчитайте количество online, offline и maintenance. |
| 2 | Словарь | Создайте словарь интерфейс: IP-адрес. Добавьте новый интерфейс, измените адрес существующего и удалите один интерфейс. |
| 3 | Множества | Даны множества разрешённых и фактически используемых портов. Определите разрешённые используемые порты, используемые, но неразрешённые порты и разрешённые, но неиспользуемые порты. |
Используйте данные:
statuses = [ "online", "offline", "online", "maintenance", "online", "offline", "online"]
allowed_ports = {22, 80, 443, 53}used_ports = {22, 80, 3306, 8080}Вариант 10
Section titled “Вариант 10”| № | Тип задачи | Описание задачи |
|---|---|---|
| 1 | Список | Дан список чисел. Сформируйте новый список без повторяющихся элементов, сохранив порядок первого появления. |
| 2 | Словарь | Создайте словарь hostname: status. Подсчитайте количество узлов со статусом online и offline. |
| 3 | Файл + список словарей | В servers.txt строки имеют формат hostname;ip;status. Сформируйте список словарей и выведите данные обо всех серверах. Затем подсчитайте количество узлов со статусом online. |
Исходный список для задания 1:
numbers = [5, 2, 5, 7, 2, 9, 1, 7, 3, 9, 4]Содержимое файла servers.txt:
srv01;192.168.1.10;onlinesrv02;192.168.1.11;offlinesrv03;192.168.1.12;onlinebackup01;192.168.1.20;onlinedb01;192.168.1.30;offlineВариант 11
Section titled “Вариант 11”| № | Тип задачи | Описание задачи |
|---|---|---|
| 1 | Список | Пользователь вводит 7 значений загрузки RAM. Сформируйте список значений выше среднего и отсортируйте его по убыванию. |
| 2 | Кортеж | Создайте кортеж с данными сетевого интерфейса: имя, IP-адрес, маска. Выполните распаковку и выведите значения. |
| 3 | Словарь | Создайте словарь IP: количество_ошибок. Выведите все IP, у которых ошибок больше 3, и определите общее количество ошибок. |
Пример словаря для задания 3:
errors = { "192.168.1.10": 1, "192.168.1.15": 7, "192.168.1.20": 3, "192.168.1.25": 5, "192.168.1.30": 2}Вариант 12
Section titled “Вариант 12”| № | Тип задачи | Описание задачи |
|---|---|---|
| 1 | Список | Дан список имён служб. Отсортируйте его по алфавиту, выведите количество элементов и проверьте наличие ssh. |
| 2 | Множества | Даны множества пакетов на двух серверах. Определите общие пакеты и пакеты, присутствующие только на первом сервере. |
| 3 | Файл + словарь | В services.txt строки имеют формат service status. Сформируйте словарь и выведите неактивные службы. |
Исходные данные:
services = ["nginx", "ssh", "docker", "cron", "postgresql", "redis"]
server1 = {"nginx", "python3", "git", "docker", "curl"}server2 = {"nginx", "python3", "postgresql", "curl", "nano"}Содержимое файла services.txt:
ssh activenginx activepostgresql inactivedocker activeredis inactivecron activeВариант 13
Section titled “Вариант 13”| № | Тип задачи | Описание задачи |
|---|---|---|
| 1 | Список | Дан список IP-адресов. Отсортируйте их как строки и выведите первый и последний элементы результата. |
| 2 | Словарь | Создайте словарь имя_узла: время_ответа. Выведите узел с минимальным и максимальным временем ответа. |
| 3 | Множество + файл | Прочитайте login.log, где имя пользователя находится первым полем. Определите количество записей и количество уникальных пользователей. |
Исходные данные для задания 1:
addresses = [ "192.168.1.20", "10.0.0.5", "192.168.1.3", "172.16.0.1", "192.168.1.100"]Содержимое файла login.log:
admin LOGIN_SUCCESSstudent LOGIN_FAILEDivanov LOGIN_SUCCESSadmin LOGIN_SUCCESSstudent LOGIN_SUCCESSpetrov LOGIN_FAILEDadmin LOGIN_FAILEDivanov LOGIN_SUCCESSВариант 14
Section titled “Вариант 14”| № | Тип задачи | Описание задачи |
|---|---|---|
| 1 | Список | Дан список значений состояния оборудования от 0 до 100. Разделите значения на два списка: ниже 50 и 50 или выше. |
| 2 | Словарь | Создайте словарь устройство: модель. Реализуйте поиск модели по введённому имени устройства. |
| 3 | Множества | Даны множества обнаруженных и зарегистрированных устройств. Определите незарегистрированные устройства, отсутствующие зарегистрированные устройства и устройства, присутствующие в обоих множествах. |
Используйте данные:
values = [12, 67, 45, 89, 51, 34, 76, 20, 95]
registered = {"pc01", "pc02", "srv01", "printer01", "router01"}detected = {"pc01", "srv01", "printer01", "unknown01", "phone01"}Вариант 15
Section titled “Вариант 15”| № | Тип задачи | Описание задачи |
|---|---|---|
| 1 | Список | Пользователь вводит значения использования диска. Сформируйте список значений от 80 до 100 включительно и отсортируйте его по убыванию. |
| 2 | Словарь | Создайте словарь код_события: описание. Реализуйте поиск описания по введённому коду события. |
| 3 | Файл + коллекции | В inventory.txt строки имеют формат hostname;ip. Сформируйте словарь узлов и множество всех IP-адресов. Выведите количество узлов и количество уникальных IP-адресов. |
Содержимое файла inventory.txt:
srv01;192.168.1.10srv02;192.168.1.11backup01;192.168.1.20db01;192.168.1.30router01;192.168.1.1printer01;192.168.1.50Контрольные вопросы
Section titled “Контрольные вопросы”- Что такое список в Python?
- Чем список отличается от кортежа?
- Как добавить элемент в список?
- Как удалить элемент из списка?
- В чём различие между
sort()иsorted()? - Как проверить наличие значения в списке?
- Что хранит словарь?
- Как добавить или изменить элемент словаря?
- Как перебрать одновременно ключи и значения словаря?
- Для чего используются множества?
- Что произойдёт с повторяющимися элементами при преобразовании списка во множество?
- Что означают объединение, пересечение и разность множеств?
- Когда удобно использовать кортеж?
- Что такое список словарей и в каких задачах он может применяться?
- Как можно использовать коллекции совместно с данными, прочитанными из текстового файла?