python_for_analytics

Форк
0
/
1.6_HW_exceptions_and_errors.ipynb 
301 строка · 11.4 Кб
1
{
2
 "cells": [
3
  {
4
   "cell_type": "markdown",
5
   "id": "40178df7",
6
   "metadata": {},
7
   "source": [
8
    "## 6. Исключения и обработка ошибок\n",
9
    "\n",
10
    "### Задание 1\n",
11
    "\n",
12
    "Печатные газеты использовали свой формат дат для каждого выпуска. Для каждой газеты из списка напишите формат указанной даты для перевода в объект дата и время:\n",
13
    "\n",
14
    "- The Moscow Times — среда, 2 октября 2002 г.\n",
15
    "- The Guardian — Пятница, 11.10.13\n",
16
    "- Ежедневные новости — Четверг, 18 августа 1977\n",
17
    "\n",
18
    "## 6. Exceptions and errors\n",
19
    "\n",
20
    "### Task 1\n",
21
    "\n",
22
    "Printed newspapers used their own date format for each issue. For each newspaper from the list, write the format of the specified date to be translated into the date and time object:\n",
23
    "- The Moscow Times — Wednesday, October 2, 2002\n",
24
    "- The Guardian — Friday, 11.10.13\n",
25
    "- Daily News — Thursday, August 18, 1977"
26
   ]
27
  },
28
  {
29
   "cell_type": "code",
30
   "execution_count": 2,
31
   "id": "8162bf7f",
32
   "metadata": {},
33
   "outputs": [
34
    {
35
     "name": "stdout",
36
     "output_type": "stream",
37
     "text": [
38
      "The Moscow Times 2002-10-02 00:00:00\n",
39
      "The Guardian 2013-10-11 00:00:00\n",
40
      "The Guardian 1977-08-18 00:00:00\n"
41
     ]
42
    }
43
   ],
44
   "source": [
45
    "from datetime import datetime\n",
46
    "\n",
47
    "print('The Moscow Times', datetime.strptime('Wednesday, October 02, 2002', '%A, %B %d, %Y'))\n",
48
    "print('The Guardian', datetime.strptime('Friday, 11.10.13', '%A, %d.%m.%y'))\n",
49
    "print('The Guardian', datetime.strptime('Thursday, 18 August 1977', '%A, %d %B %Y'))"
50
   ]
51
  },
52
  {
53
   "cell_type": "markdown",
54
   "id": "775a5041",
55
   "metadata": {},
56
   "source": [
57
    "### Задание 2\n",
58
    "\n",
59
    "Дан поток дат в формате YYYY-MM-DD, в которых встречаются некорректные значения: stream = [‘2018-04-02’, ‘2018-02-29’, ‘2018-19-02’]\n",
60
    "\n",
61
    "Напишите функцию, которая проверяет эти даты на корректность. Т. е. для каждой даты возвращает True (дата корректна) или False (некорректная дата).\n",
62
    "\n",
63
    "### Task 2\n",
64
    "\n",
65
    "Given a stream of dates in the format YYYY-MM-DD, in which incorrect values occur: stream = [‘2018-04-02’, ‘2018-02-29’, ‘2018-19-02’]\n",
66
    "\n",
67
    "Write a function that checks these dates for correctness. That is, for each date it returns True (the date is correct) or False (incorrect date)."
68
   ]
69
  },
70
  {
71
   "cell_type": "code",
72
   "execution_count": 3,
73
   "id": "6cb93136",
74
   "metadata": {},
75
   "outputs": [
76
    {
77
     "name": "stdout",
78
     "output_type": "stream",
79
     "text": [
80
      "2018-04-02 - True\n",
81
      "2018-02-29 - False\n",
82
      "2018-19-02 - False\n"
83
     ]
84
    }
85
   ],
86
   "source": [
87
    "from datetime import datetime\n",
88
    "\n",
89
    "stream = ['2018-04-02', '2018-02-29', '2018-19-02']\n",
90
    "\n",
91
    "def check(list_of_dates):\n",
92
    "    for days in list_of_dates:\n",
93
    "        try:\n",
94
    "            datetime.strptime(days, '%Y-%m-%d')\n",
95
    "            print(f'{days} - True')\n",
96
    "        except:\n",
97
    "            print(f'{days} - False')\n",
98
    "            \n",
99
    "check(stream)"
100
   ]
101
  },
102
  {
103
   "cell_type": "markdown",
104
   "id": "20472a89",
105
   "metadata": {},
106
   "source": [
107
    "### Задание 3\n",
108
    "\n",
109
    "Напишите функцию date_range, которая возвращает список дат за период от start_date до end_date. Даты должны вводиться в формате YYYY-MM-DD. В случае неверного формата или при start_date > end_date должен возвращаться пустой список.\n",
110
    "\n",
111
    "### Task 3\n",
112
    "\n",
113
    "Write a date_range function that returns a list of dates for the period from start_date to end_date. Dates must be entered in the YYYY-MM-DD format. If the format is incorrect or when start_date > end_date, an empty list should be returned."
114
   ]
115
  },
116
  {
117
   "cell_type": "code",
118
   "execution_count": 4,
119
   "id": "12caecf9",
120
   "metadata": {},
121
   "outputs": [
122
    {
123
     "name": "stdout",
124
     "output_type": "stream",
125
     "text": [
126
      "['2023-01-20', '2023-01-21', '2023-01-22', '2023-01-23']\n"
127
     ]
128
    }
129
   ],
130
   "source": [
131
    "from datetime import datetime\n",
132
    "from datetime import timedelta\n",
133
    "\n",
134
    "def date_range(start_date, end_date):\n",
135
    "    dates_list = []\n",
136
    "    try:\n",
137
    "        start_date_dt = datetime.strptime(start_date, '%Y-%m-%d')\n",
138
    "        end_date_dt = datetime.strptime(end_date, '%Y-%m-%d')\n",
139
    "        current_date_dt = start_date_dt\n",
140
    "    except:\n",
141
    "        print(dates_list)\n",
142
    "        return\n",
143
    "    if current_date_dt > end_date_dt:\n",
144
    "        print(dates_list)\n",
145
    "    else:\n",
146
    "        while current_date_dt <= end_date_dt:\n",
147
    "            dates_list.append(current_date_dt.strftime('%Y-%m-%d'))\n",
148
    "            current_date_dt += timedelta(days=1)\n",
149
    "        print(dates_list)\n",
150
    "\n",
151
    "date_range('2023-01-20', '2023-01-23')"
152
   ]
153
  },
154
  {
155
   "cell_type": "markdown",
156
   "id": "1e60a73a",
157
   "metadata": {},
158
   "source": [
159
    "### Задание 4\n",
160
    "\n",
161
    "Задание 4 (необязательное)\n",
162
    "Ваш коллега прислал код функции:\n",
163
    "\n",
164
    "DEFAULT_USER_COUNT = 3\n",
165
    "\n",
166
    "def delete_and_return_last_user(region, default_list=[‘A100’, ‘A101’, ‘A102’]):\n",
167
    "\n",
168
    "\"\"\" Удаляет из списка default_list последнего пользователя и возвращает ID нового последнего пользователя. \"\"\"\n",
169
    "\n",
170
    "element_to_delete = default_list[-1]\n",
171
    "\n",
172
    "default_list.remove(element_to_delete)\n",
173
    "\n",
174
    "return default_list[DEFAULT_USER_COUNT-2]\n",
175
    "\n",
176
    "При однократном вызове этой функции все работает корректно:\n",
177
    "\n",
178
    "delete_and_return_last_user(1)\n",
179
    "\n",
180
    "‘A101’\n",
181
    "\n",
182
    "Однако, при повторном вызове получается ошибка IndexError: list index out of range.\n",
183
    "\n",
184
    "Задание:\n",
185
    "- Что значит ошибка list index out of range?\n",
186
    "- Почему при первом запуске функция работает корректно, а при втором - нет?\n",
187
    "\n",
188
    "### Task 4\n",
189
    "\n",
190
    "Task 4 (optional)\n",
191
    "Your colleague sent the function code:\n",
192
    "\n",
193
    "DEFAULT_USER_COUNT = 3\n",
194
    "\n",
195
    "def delete_and_return_last_user(region, default_list=[‘A100’, ‘A101’, ‘A102’]):\n",
196
    "\n",
197
    "\"\"\" Removes the last user from the default_list list and returns the ID of the new last user. \"\"\"\n",
198
    "\n",
199
    "element_to_delete = default_list[-1]\n",
200
    "\n",
201
    "default_list.remove(element_to_delete)\n",
202
    "\n",
203
    "return default_list[DEFAULT_USER_COUNT-2]\n",
204
    "\n",
205
    "When calling this function once, everything works correctly:\n",
206
    "\n",
207
    "delete_and_return_last_user(1)\n",
208
    "\n",
209
    "‘A101’\n",
210
    "\n",
211
    "However, the repeated call results in an error IndexError: list index out of range.\n",
212
    "\n",
213
    "Task:\n",
214
    "- What does the list index out of range error mean?\n",
215
    "- Why does the function work correctly at the first launch, but not at the second?"
216
   ]
217
  },
218
  {
219
   "cell_type": "code",
220
   "execution_count": 5,
221
   "id": "00cb104d",
222
   "metadata": {},
223
   "outputs": [
224
    {
225
     "name": "stdout",
226
     "output_type": "stream",
227
     "text": [
228
      "A101\n"
229
     ]
230
    },
231
    {
232
     "ename": "IndexError",
233
     "evalue": "list index out of range",
234
     "output_type": "error",
235
     "traceback": [
236
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
237
      "\u001b[1;31mIndexError\u001b[0m                                Traceback (most recent call last)",
238
      "Cell \u001b[1;32mIn[5], line 14\u001b[0m\n\u001b[0;32m     11\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m default_list[DEFAULT_USER_COUNT\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m2\u001b[39m]\n\u001b[0;32m     13\u001b[0m \u001b[38;5;28mprint\u001b[39m(delete_and_return_last_user(\u001b[38;5;241m1\u001b[39m))\n\u001b[1;32m---> 14\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[43mdelete_and_return_last_user\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m)\u001b[49m)\n",
239
      "Cell \u001b[1;32mIn[5], line 11\u001b[0m, in \u001b[0;36mdelete_and_return_last_user\u001b[1;34m(region, default_list)\u001b[0m\n\u001b[0;32m      8\u001b[0m element_to_delete \u001b[38;5;241m=\u001b[39m default_list[\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m]\n\u001b[0;32m      9\u001b[0m default_list\u001b[38;5;241m.\u001b[39mremove(element_to_delete)\n\u001b[1;32m---> 11\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mdefault_list\u001b[49m\u001b[43m[\u001b[49m\u001b[43mDEFAULT_USER_COUNT\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[38;5;241;43m2\u001b[39;49m\u001b[43m]\u001b[49m\n",
240
      "\u001b[1;31mIndexError\u001b[0m: list index out of range"
241
     ]
242
    }
243
   ],
244
   "source": [
245
    "DEFAULT_USER_COUNT = 3\n",
246
    "\n",
247
    "def delete_and_return_last_user(region, default_list=['A100', 'A101', 'A102']):\n",
248
    "    \"\"\"\"\n",
249
    "    Удаляет из списка default_list последнего пользователя\n",
250
    "    и возвращает ID нового последнего пользователя.\n",
251
    "    \"\"\"\n",
252
    "    element_to_delete = default_list[-1]\n",
253
    "    default_list.remove(element_to_delete)\n",
254
    "\n",
255
    "    return default_list[DEFAULT_USER_COUNT-2]\n",
256
    "\n",
257
    "print(delete_and_return_last_user(1))\n",
258
    "print(delete_and_return_last_user(1))"
259
   ]
260
  },
261
  {
262
   "cell_type": "markdown",
263
   "id": "892fb514",
264
   "metadata": {},
265
   "source": [
266
    "1.Она обозначает попытку обратиться к элементу с номером, превышающим длину словаря - 1.\n",
267
    "\n",
268
    "2.Потому что функция использует список в качестве значения по умолчанию. Список изменяемый объект и после первого использования функции он изменяется. И при повторном вызове функции она использует укороченную версию значения по умолчанию."
269
   ]
270
  },
271
  {
272
   "cell_type": "markdown",
273
   "id": "233fcf87",
274
   "metadata": {},
275
   "source": [
276
    "![](Python_logo.png)"
277
   ]
278
  }
279
 ],
280
 "metadata": {
281
  "kernelspec": {
282
   "display_name": "Python 3 (ipykernel)",
283
   "language": "python",
284
   "name": "python3"
285
  },
286
  "language_info": {
287
   "codemirror_mode": {
288
    "name": "ipython",
289
    "version": 3
290
   },
291
   "file_extension": ".py",
292
   "mimetype": "text/x-python",
293
   "name": "python",
294
   "nbconvert_exporter": "python",
295
   "pygments_lexer": "ipython3",
296
   "version": "3.9.13"
297
  }
298
 },
299
 "nbformat": 4,
300
 "nbformat_minor": 5
301
}
302

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

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

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

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