python_for_analytics

Форк
0
/
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

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.