4.5. Самостоятельная работа¶
Примечание
При выполнении заданий используйте заготовки решений: -> Репозиторий.
Подробнее: см. Цикл выполнения и защиты заданий.
4.5.1. Комплексная задача¶
№4.5.1
Продолжите решение задачи № 3.5.1.
Используя результаты предыдущего решения, а также заготовку и Листинг 4.5.1:
устраните дублирование кода при выводе списка объектов, используя циклы;
добавьте меню с пунктами:
список объектов;
фильтр по атрибуту (одному или нескольким) объекта;
средний показатель по атрибуту объекта.
перенесите вывод списка объектов в соответствующий пункт меню и реализуйте два новых.
Листинг 4.5.1 - Пример реализации меню, фильтра и среднего показателя¶
1# Это пример кода, он может быть произвольно усложнен
2# в рамках ограничений темы
3#
4# Требования:
5#
6# * устраните дублирование кода при выводе списка объектов,
7# используя циклы;
8# * добавьте меню с пунктами:
9# * список объектов;
10# * фильтр по атрибуту (одному или нескольким) объекта;
11# * средний показатель по атрибуту объекта.
12# * перенесите вывод списка объектов в соответствующий пункт меню и
13# реализуйте два новых.
14
15
16# Замените атрибуты словаря и др. на соответствующие своему варианту
17
18db = [
19 {
20 "name": "Иванов Иван",
21 "birthday": "01/12/2000",
22 "height": 170,
23 "weight": 70.5,
24 "car": True,
25 "languages": ["С++", "Python"]
26 },
27
28 ...
29]
30
31while True:
32 print("\n-----")
33 print("Меню")
34 print("-----")
35 print("1. Список сотрудников.")
36 print("2. Фильтр по языку программирования.")
37 print("3. Средний рост сотрудников, моложе указанного г.р.")
38 print("\nВыберите пункт меню или нажмите ENTER для выхода: ", end="")
39
40 answer = input()
41
42 if answer == "1":
43 print("Содержимое базы данных ({}):".format(len(db)))
44 for i, item in enumerate(db, start=1):
45 print("{}.".format(i))
46 print("Имя: {}".format(item["name"]))
47
48 ...
49
50 elif answer == "2":
51 lang = input("Введите язык программирования: ")
52 # "Нормализация" наименования языка на случай ошибки при вводе
53 lang = lang.capitalize()
54
55 # res - копия db, с сотрудниками, удовлетворяющими условию по языку
56 res = []
57 for item in db:
58 if lang in item["languages"]:
59 res.append(item)
60
61 if len(res) > 0:
62 print("Список сотрудников со знанием "
63 "языка программирования {} ({}):".format(lang, len(res)))
64 for i, item in enumerate(res, start=1):
65 print("{}.".format(i))
66 print("Имя: {}".format(item["name"]))
67
68 ...
69 else:
70 print("Таких сотрудников нет.")
71
72 elif answer == "3":
73 younger_than = int(input("Введите год рождения сотрудника: "))
74
75 r_sum = 0
76 r_col = 0
77 for item in db:
78 year = int(item["birthday"][-4:])
79 if year >= younger_than:
80 r_sum += item["height"]
81 r_col += 1
82
83 if r_col > 0:
84 print("Средний рост сотрудников, {} г.р. и моложе: ({:.1f}) см.".
85 format(younger_than, r_sum / r_col))
86 else:
87 print("Таких сотрудников нет.")
88
89 else:
90 break
91
92
93# --------------
94# Пример вывода:
95#
96# -----
97# Меню
98# -----
99# 1. Список сотрудников.
100# 2. Фильтр по языку программирования.
101# 3. Средний рост сотрудников, моложе указанного г.р.
102#
103# Выберите пункт меню или нажмите ENTER для выхода: 1
104# Содержимое базы данных (3):
105# 1.
106# Имя: Иванов Иван
107# День рождения: 01/12/2000
108# Рост (см.): 170
109# Вес (кг.): 70.5
110# Есть машина: True
111# Языки программирования: ['С++', 'Python']
112# 2.
113# Имя: Сергеев Сергей
114# День рождения: 01/06/2001
115# Рост (см.): 180
116# Вес (кг.): 110.4
117# Есть машина: False
118# Языки программирования: ['Pascal', 'Delphi']
119# 3.
120# Имя: Николаева Мария
121# День рождения: 14/07/1998
122# Рост (см.): 180
123# Вес (кг.): 66.9
124# Есть машина: True
125# Языки программирования: ['C#', 'C++', 'C']
126#
127# -----
128# Меню
129# -----
130# 1. Список сотрудников.
131# 2. Фильтр по языку программирования.
132# 3. Средний рост сотрудников, моложе указанного г.р.
133#
134# Выберите пункт меню или нажмите ENTER для выхода: 2
135# Введите язык программирования: Python
136# Список сотрудников со знанием языка программирования Python (1):
137# 1.
138# Имя: Иванов Иван
139# День рождения: 01/12/2000
140# Рост (см.): 170
141# Вес (кг.): 70.5
142# Есть машина: True
143# Языки программирования: ['С++', 'Python']
144# Результат поиска сохранен в файл.
145#
146# -----
147# Меню
148# -----
149# 1. Список сотрудников.
150# 2. Фильтр по языку программирования.
151# 3. Средний рост сотрудников, моложе указанного г.р.
152#
153# Выберите пункт меню или нажмите ENTER для выхода: 3
154# Введите год рождения сотрудника: 2000
155# Средний рост сотрудников, 2000 г.р. и моложе: (175.0) см.