python_for_analytics
/
1.4_HW_functions.ipynb
307 строк · 13.6 Кб
1{
2"cells": [
3{
4"cell_type": "markdown",
5"id": "06048159",
6"metadata": {},
7"source": [
8"## 4. Функции\n",
9"\n",
10"### Задание 1\n",
11"\n",
12"Нужно помочь секретарю автоматизировать работу. Для этого нужно написать программу, которая будет на основе хранимых данных исполнять пользовательские команды.\n",
13"\n",
14"Требования к программе:\n",
15"1. Код должен быть грамотно декомпозирован (каждая функция отвечает за свою конкретную задачу, дублирующийся функционал переиспользуется, а его код не повторяется);\n",
16"2. В коде отсутствуют глобальные переменные (за исключением documents и directories);\n",
17"3. Пользовательский ввод обрабатывается в цикле while до тех пор, пока пользователь явно не завершит программу (вводом команды \"q\")\n",
18"\n",
19"## 4. Functions\n",
20"\n",
21"### Task 1\n",
22"\n",
23"Нам нужно помочь секретарю автоматизировать работу. Для этого вам нужно написать программу, которая будет выполнять команды пользователя на основе сохраненных данных.\n",
24"\n",
25"Требования к программе:\n",
26"1. Код должен быть правильно декомпозирован (каждая функция отвечает за свою конкретную задачу, дублирующаяся функциональность используется повторно, и ее код не повторяется);\n",
27"2. В коде нет глобальных переменных (за исключением документов и каталогов);\n",
28"3. Пользовательский ввод обрабатывается в цикле while до тех пор, пока пользователь явно не завершит программу (введя команду \"q\")."
29]
30},
31{
32"cell_type": "code",
33"execution_count": 1,
34"id": "91f27c9e",
35"metadata": {},
36"outputs": [
37{
38"name": "stdout",
39"output_type": "stream",
40"text": [
41"Список команд:\n",
42"p - проверяет имя владельца по номеру документа\n",
43"s - проверяет полку по номеру документа\n",
44"l - выводит всю информацию\n",
45"ads - добавляет новую полку\n",
46"ds - удаляет полку\n",
47"q- завершение программы\n",
48"Введите команду: p\n",
49"Введите номер документа: 11-2\n",
50"Владелец документа: Геннадий Покемонов\n",
51"Введите команду: l\n",
52"passport \"2207 876234\" \"Василий Гупкин\"\n",
53"invoice \"11-2\" \"Геннадий Покемонов\"\n",
54"insurance \"10006\" \"Аристарх Павлов\"\n",
55"Введите команду: q\n",
56"Программа завершена.\n"
57]
58}
59],
60"source": [
61"documents = [\n",
62" {'type': 'passport', 'number': '2207 876234', 'name': 'Василий Гупкин'},\n",
63" {'type': 'invoice', 'number': '11-2', 'name': 'Геннадий Покемонов'},\n",
64" {'type': 'insurance', 'number': '10006', 'name': 'Аристарх Павлов'}\n",
65"]\n",
66"\n",
67"directories = {\n",
68" '1': ['2207 876234', '11-2'],\n",
69" '2': ['10006'],\n",
70" '3': []\n",
71"}\n",
72"\n",
73"def owner ():\n",
74" \"\"\"проверяет имя владельца по номеру документа\"\"\"\n",
75" numbers = input ('Введите номер документа: ')\n",
76" for number_doc in documents:\n",
77" if numbers == number_doc ['number']:\n",
78" print (f'Владелец документа: {number_doc[\"name\"]}')\n",
79" break\n",
80" else:\n",
81" print (\"Документ не найден\")\n",
82"\n",
83"def shelf (numbers = None):\n",
84" \"\"\"проверяет полку по номеру документа\"\"\"\n",
85" if numbers == None:\n",
86" numbers = input('Введите номер документа: ')\n",
87" for key, values in directories.items ():\n",
88" if numbers in values:\n",
89" desired_shelf = key\n",
90" print (f'Документ хранится на полке: {desired_shelf}')\n",
91" break\n",
92" else:\n",
93" print (\"Документ не найден\")\n",
94"\n",
95"def all_information ():\n",
96" \"\"\"выводит всю информацию\"\"\"\n",
97" for doc in documents:\n",
98" doc_type = doc.get('type')\n",
99" doc_number = doc.get('number')\n",
100" doc_name = doc.get('name')\n",
101" print (f'{doc_type} \"{doc_number}\" \"{doc_name}\"')\n",
102"\n",
103"def shelf_list ():\n",
104" \"\"\"вспомогательная функция\"\"\"\n",
105" shelf_list = ', '.join(shelf for shelf in directories)\n",
106" return str(shelf_list)\n",
107"\n",
108"def newshelf ():\n",
109" \"\"\"добавляет новую полку\"\"\"\n",
110" new_shelf = str(input('Введите номер полки: '))\n",
111" for shelfes in directories:\n",
112" if new_shelf in shelfes:\n",
113" print(f\"Полка уже заполнена: {shelf_list()}\")\n",
114" break\n",
115" else:\n",
116" directories[new_shelf] = []\n",
117" print(f\"Полка добавлена: {shelf_list()}\")\n",
118"\n",
119"def shelf_delete ():\n",
120" \"\"\"удаляет полку\"\"\"\n",
121" del_shelf = input('Введите номер полки: ')\n",
122" if del_shelf in directories:\n",
123" if directories[del_shelf]:\n",
124" print(f\"\"\"Полка уже заполнена: {shelf_list()}\"\"\")\n",
125" else:\n",
126" directories.pop(del_shelf)\n",
127" print(f\"Полка удалена: {shelf_list()}\")\n",
128" else: \n",
129" print(f\"Такой полки нет: {shelf_list()}\")\n",
130"\n",
131"def show_help():\n",
132" print('Список команд:')\n",
133" print('p - проверяет имя владельца по номеру документа')\n",
134" print('s - проверяет полку по номеру документа')\n",
135" print('l - выводит всю информацию')\n",
136" print('ads - добавляет новую полку')\n",
137" print('ds - удаляет полку')\n",
138" print('q- завершение программы')\n",
139"\n",
140"def secretary_job ():\n",
141" show_help()\n",
142" \n",
143" while True:\n",
144" commands = input ('Введите команду: ')\n",
145" if commands == 'p':\n",
146" owner ()\n",
147" elif commands == 's':\n",
148" shelf ()\n",
149" elif commands == 'l':\n",
150" all_information () \n",
151" elif commands == 'ads':\n",
152" newshelf()\n",
153" elif commands == 'ds':\n",
154" shelf_delete() \n",
155" elif commands == 'q':\n",
156" print ('Программа завершена.')\n",
157" break \n",
158"secretary_job ()"
159]
160},
161{
162"cell_type": "markdown",
163"id": "7946f329",
164"metadata": {},
165"source": [
166"### Задание 2\n",
167"\n",
168"1.код должен быть грамотно декомпозирован (каждая функция отвечает за свою конкретную задачу, дублирующийся функционал переиспользуется, а его код не повторяется);\n",
169"2.в коде отсутствуют глобальные переменные (за исключением documents и directories);\n",
170"3.пользовательский ввод обрабатывается в цикле while до тех пор, пока пользователь явно не завершит программу (вводом команды \"q\").\n",
171"\n",
172"### Task 2\n",
173"\n",
174"1. the code must be correctly decomposed (each function is responsible for its specific task, duplicate functionality is reused, and its code is not repeated);\n",
175"2.there are no global variables in the code (with the exception of documents and directories);\n",
176"3.User input is processed in the while loop until the user explicitly terminates the program (by entering the \"q\" command)."
177]
178},
179{
180"cell_type": "code",
181"execution_count": 2,
182"id": "3e0cee8c",
183"metadata": {},
184"outputs": [
185{
186"name": "stdout",
187"output_type": "stream",
188"text": [
189"Список команд:\n",
190"ad - добавляет новый документ\n",
191"d - удаляет документ\n",
192"m - перемещает документ с полки на полку\n",
193"q- завершение программы\n",
194"Введите команду: q\n",
195"Программа завершена.\n"
196]
197}
198],
199"source": [
200"documents = [\n",
201" {'type': 'passport', 'number': '2207 876234', 'name': 'Василий Гупкин'},\n",
202" {'type': 'invoice', 'number': '11-2', 'name': 'Геннадий Покемонов'},\n",
203" {'type': 'insurance', 'number': '10006', 'name': 'Аристарх Павлов'}\n",
204"]\n",
205"\n",
206"directories = {\n",
207" '1': ['2207 876234', '11-2'],\n",
208" '2': ['10006'],\n",
209" '3': []\n",
210"}\n",
211"\n",
212"def new_document ():\n",
213" \"\"\"добавляет новый документ\"\"\"\n",
214" doc_num = input('Введите номер: ')\n",
215" doc_type = input('Введите тип: ')\n",
216" doc_owner = input('Введите владельца: ')\n",
217" doc_shelf = str(input('Введите полку: '))\n",
218" if doc_shelf not in directories:\n",
219" print(\"Такой полки нет\")\n",
220" else:\n",
221" documents.append({'type':doc_type, 'number':doc_num,'name':doc_owner})\n",
222" directories[doc_shelf].append(doc_num) \n",
223" return\n",
224"\n",
225"def delete_document ():\n",
226" \"\"\"удаляет документ\"\"\"\n",
227" doc_num = input(\"Введите номер документа на удаление: \")\n",
228" for docs in directories.values():\n",
229" if doc_num in docs:\n",
230" docs.remove(doc_num)\n",
231" print('Документ удалён.')\n",
232" break\n",
233" else:\n",
234" print('Такого документа нет в базе данных.')\n",
235" return\n",
236" for index, docs in enumerate(documents):\n",
237" if doc_num == docs['number']:\n",
238" documents.pop(index)\n",
239" break\n",
240"\n",
241"def moving_document ():\n",
242" \"\"\"перемещает документ с полки на полку\"\"\"\n",
243" doc_number = input('Номер документа на перемещение: ')\n",
244" shelf = input('Номер полки назначения: ')\n",
245" for key, value in directories.items():\n",
246" if doc_number in value:\n",
247" value.remove(doc_number)\n",
248" for key, value in directories.items():\n",
249" if shelf in key:\n",
250" value.append(doc_number)\n",
251" print(directories) \n",
252"\n",
253"def show_help():\n",
254" print('Список команд:')\n",
255" print('ad - добавляет новый документ')\n",
256" print('d - удаляет документ')\n",
257" print('m - перемещает документ с полки на полку')\n",
258" print('q- завершение программы')\n",
259"\n",
260"def secretary_job ():\n",
261" show_help()\n",
262" \n",
263" while True:\n",
264" commands = input ('Введите команду: ')\n",
265" if commands == 'ad':\n",
266" new_document ()\n",
267" elif commands == 'd':\n",
268" delete_document ()\n",
269" elif commands == 'm':\n",
270" moving_document () \n",
271" elif commands == 'q':\n",
272" print ('Программа завершена.')\n",
273" break \n",
274"secretary_job ()"
275]
276},
277{
278"cell_type": "markdown",
279"id": "5e12cec6",
280"metadata": {},
281"source": [
282"![](Python_logo.png)"
283]
284}
285],
286"metadata": {
287"kernelspec": {
288"display_name": "Python 3 (ipykernel)",
289"language": "python",
290"name": "python3"
291},
292"language_info": {
293"codemirror_mode": {
294"name": "ipython",
295"version": 3
296},
297"file_extension": ".py",
298"mimetype": "text/x-python",
299"name": "python",
300"nbconvert_exporter": "python",
301"pygments_lexer": "ipython3",
302"version": "3.9.13"
303}
304},
305"nbformat": 4,
306"nbformat_minor": 5
307}
308