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