/
AlexeyDS
/
Test
Обзор
Документация
Войти
/
AlexeyDS
/
Test
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
ExceptionsAndErrorHandling.py
128 строк
5 KB
Алексей
upload files
19 июн 2025, 16:11
19 июн 2025, 16:11
f721624
Код
Авторство
О чём код?
# -*- coding: utf-8 -*- """ExceptionsAndErrorHandling.ipynb Automatically generated by Colab. Original file is located at https://colab.research.google.com/drive/1wTjpPNdv3-k4PGWfVul0peAWJAq-qfi6 #Задание 1 """ '''Печатные газеты использовали свой формат дат для каждого выпуска. Для каждой газеты из списка напишите формат указанной даты для перевода в объект datetime: The Moscow Times — Wednesday, October 2, 2002 The Guardian — Friday, 11.10.13 Daily News — Thursday, 18 August 1977''' import re from datetime import datetime lst_newspapers = ['The Moscow Times — Wednesday, October 2, 2002', 'The Guardian — Friday, 11.10.13', 'Daily News — Thursday, 18 August 1977'] def get_date(str_in: str) -> datetime: if 'The Moscow Times' in str_in: format_date = '%A, %B %d, %Y' pattern = r'(\w+, \w+ \d+, \d{4})' elif 'The Guardian' in str_in: format_date = '%A, %d.%m.%y' pattern = r'(\w+, \d{2}\.\d{2}\.\d{2})' elif 'Daily News' in str_in: format_date = '%A, %d %B %Y' pattern = r'(\w+, \d{1,2} \w+ \d{4})' else: return f"Неизвестная газета" search_date = re.search(pattern, str_in) date = search_date.group() return datetime.strptime(date, format_date) for newspaper in lst_newspapers: print(get_date(newspaper)) """#Задание 2""" '''Дан поток дат в формате YYYY-MM-DD, в которых встречаются некорректные значения: stream = [‘2018-04-02’, ‘2018-02-29’, ‘2018-19-02’] Напишите функцию, которая проверяет эти даты на корректность. То есть для каждой даты возвращает True — дата корректна или False — некорректная.''' from datetime import datetime stream = ['2018-04-02', '2018-02-29', '2018-19-02'] def chek_dates(str_in: str) -> bool: try: datetime.strptime(str_in, '%Y-%m-%d') return True except ValueError: return False for date in stream: print(f'Дата {date}: {chek_dates(date)}') """#Задание 3""" '''Напишите функцию date_range, которая возвращает список дат за период от start_date до end_date. Даты должны вводиться в формате YYYY-MM-DD. В случае неверного формата или при start_date > end_date должен возвращаться пустой список.''' from datetime import datetime, timedelta def date_range(first_date: str, second_date: str) -> list[str]: try: start_date = datetime.strptime(first_date, '%Y-%m-%d') end_date = datetime.strptime(second_date, '%Y-%m-%d') if start_date > end_date: return [] lst_dates = [] current_date = start_date while current_date <= end_date: lst_dates.append(datetime.strftime(current_date, '%Y-%m-%d')) current_date += timedelta(days=1) return lst_dates except ValueError: return [] print(date_range('2018-01-03', '2017-11-10')) print(date_range('2018-01-03', '2018-01-10')) print(date_range('2018-01-03', '2018-02-10')) """#Задание 4""" '''Ваш коллега прислал код функции: DEFAULT_USER_COUNT = 3 def delete_and_return_last_user(region, default_list=[‘A100’, ‘A101’, ‘A102’]): ""“ Удаляет из списка default_list последнего пользователя и возвращает ID нового последнего пользователя. ”"" element_to_delete = default_list[-1] default_list.remove(element_to_delete) 1 return default_list[DEFAULT_USER_COUNT-2] При однократном вызове этой функции всё работает корректно: delete_and_return_last_user(1) ‘A101’ Однако при повторном вызове получается ошибка IndexError: list index out of range. Задание: 1. Что значит ошибка list index out of range? 2. Почему при первом запуске функция работает корректно, а при втором — нет?''' DEFAULT_USER_COUNT = 3 def delete_and_return_last_user(region, default_list=['A100', 'A101', 'A102']): element_to_delete = default_list[-1] default_list.remove(element_to_delete) return default_list[DEFAULT_USER_COUNT-2] print(delete_and_return_last_user(1)) print(delete_and_return_last_user(1)) '''1. Ошибка "list index out of range" - выход за пределы допустимого диапазона списка; 2. При повторном запуске функция работает некорректно, так как мы итеррируемся по самому объекту(списку) и удаляем из него элемент, а не его копии. Соответственно количество элементов списка "default_list", при повторной итерации по нему, буде равно 1 элементу - нулевой индекс, а мы будем пытаться вернуть элемент под индексом 1.'''