/
Carton
/
python-course-tasks
Обзор
Документация
Войти
/
Carton
/
python-course-tasks
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
task_11_02_03/customer.py
107 строк
5 KB
Yuri Petrov
+ перенос заданий в отдельный репозиторий
02 июл 2020, 02:05
02 июл 2020, 02:05
5312992
Код
Авторство
О чём код?
# Программирование на языке высокого уровня (Python). # https://www.yuripetrov.ru/edu/python # Задание task_11_02_03. # # Выполнил: Фамилия И.О. # Группа: !!! # E-mail: !!! import re import datetime class Customer: """Класс Customer представляет клиента. Атрибуты экземпляра класса: - self.info: словарь-информация о клиенте; содержит следующие ключи: - f (str): фамилия клиента; - i (str): имя клиента; - o (str): отчество клиента; - birthday (datetime.date): дата рождения; - polis_type (str): тип полиса; - polis_price (int): цена оформленного полиса. """ def __init__(self, info): """Инициализация класса. Аргументы: - info (dict): словарь-информация о клиенте (формата 'self.info') Необходимые проверки: - info - словарь и содержит необходимые ключи; - значения в словаре имеют нужный тип. Исключения: - ValueError - если не все проверки успешны. Действия: - установить self.info; - Ф, И, О и тип полиса должны быть с большой буквы. """ raise NotImplementedError # Уберите raise и допишите код def __str__(self): """Вернуть строковое представление клиента. Формат: 'Крутов Олег Павлович 13/01/1973 Транспорт 50,000 руб.'. Для вывода суммы с разделителем тысяч используйте заполнитель {:,}. """ raise NotImplementedError # Уберите raise и допишите код @classmethod def from_string(cls, str_value): """Создать и вернуть экземпляр класса Customer из строки 'str_value'. 1. Используя регулярное выражение, проверить, что 'str_value' содержит информацию о клиенте: - ФИО клиента в произвольном регистре; в качестве разделителя может быть использован пробел или знак табуляции; - Дата рождения: - день и месяц могут быть указаны с наличием/отсутствием ведущего 0; - год может содержать 2 или 4 цифры; - в качестве разделителя может быть использован '.', '/' или '-'. - Тип полиса: "Транспорт", "Недвижимость", "Путешествия" или "Здоровье"; - Сумма: целое число. Пример: 'Крутов Олег Павлович 13/01/1973 Транспорт 50,000 руб.' Неплохим вариантом будет использовать именованные аргументы, совпадающие с ключами в 'self.info', таким образом, их будет просто получить через 'match.groupdict()'. Возбудить ValueError, если не удается получить информацию из строки. 2. При обнаружении информации, сформировать словарь найденных данных: - откорректировать год до 4-х знаков; - все числовые значения преобразовать в соответствующие типы. 3. Создать экземпляр класса и вернуть в качестве результата. """ raise NotImplementedError # Уберите raise и допишите код def __getattr__(self, key): """Вернуть значение атрибута 'key'. Благодаря специальному методу '__getattr__' обращение к характеристике клиента, например, фамилии будет выгляеть как Customer.f, вместо Customer.info['f'] т.е. нет необходимости объявлять отдельные методы/свойства для "красивого" доступа к значениям 'self.info'. """ if key in self.info: return self.info[key] raise AttributeError(key)