diff --git "a/\320\233\320\260\320\261\320\276\321\200\320\260\321\202\320\276\321\200\320\275\320\260\321\217 \321\200\320\260\320\261\320\276\321\202\320\260 1/task_1.py" "b/\320\233\320\260\320\261\320\276\321\200\320\260\321\202\320\276\321\200\320\275\320\260\321\217 \321\200\320\260\320\261\320\276\321\202\320\260 1/task_1.py" deleted file mode 100644 index 41d174e..0000000 --- "a/\320\233\320\260\320\261\320\276\321\200\320\260\321\202\320\276\321\200\320\275\320\260\321\217 \321\200\320\260\320\261\320\276\321\202\320\260 1/task_1.py" +++ /dev/null @@ -1,183 +0,0 @@ -import doctest - - -class Car: - """ - Класс, описывающий автомобиль. - """ - - def __init__(self, brand: str, mileage: int): - """ - Создание и подготовка к работе объекта "Автомобиль" - - :param brand: Марка автомобиля - :param mileage: Пробег автомобиля. - - :raise ValueError: Если пробег меньше нуля, то вызываем ошибку - - Примеры: - >>> car = Car('Toyota', 2000) - """ - self.brand = brand - - if mileage < 0: - raise ValueError("Пробег не может быть отрицательным числом") - self.mileage = mileage - - def drive(self, distance: int) -> None: - """ - Езда на автомобиле. - - :param distance: Пройденное расстояние - - :raise ValueError: Если пройденное расстояние меньше нуля, то вызываем ошибку - - Примеры: - >>> car = Car('Toyota', 5000) - >>> car.drive(100) - """ - if not isinstance(distance, int): - raise TypeError("Пройденное расстояние должно быть типа int") - if distance < 0: - raise ValueError("Пройденное расстояние не может быть отрицательным числом") - self.mileage += distance - - def print_info(self) -> None: - """ - Получение информации об автомобиле. - - Примеры: - >>> car = Car('Toyota', 900) - >>> car.print_info() - Toyota пробег 900 км - """ - print(f'{self.brand} пробег {self.mileage} км') - - -class Smartphone: - """ - Класс, описывающий смартфон. - """ - - def __init__(self, brand: str, battery_percentage: int): - """ - Создание и подготовка к работе объекта "Смартфон" - - :param brand: Бренд смартфона - :param battery_percentage: Уровень заряда батареи - - :raise ValueError: Если уровень заряда выходит за диапазон значений от 0 до 100, то вызываем ошибку - - Примеры: - >>> phone = Smartphone("Samsung", 90) - """ - self.brand = brand - - if not isinstance(battery_percentage, int): - raise TypeError("Уровень заряда батареи должен быть типа int") - if not (0 < battery_percentage <= 100): - raise ValueError("Уровень заряда батареи должен быть от 0 до 100") - self.battery_percentage = battery_percentage - - def make_call(self, contact: str, duration: int) -> None: - """ - Осуществление звонка смартфоном. - - :param contact: Имя контакта - :param duration: Продолжительность звонка в секундах - - :raise ValueError: Если продолжительность звонка меньше 0, то вызывается ошибка - - Примеры: - >>> phone = Smartphone("Samsung", 20) - >>> phone.make_call("Ivan Petrov", 260) - """ - if not isinstance(duration, int): - raise TypeError("Продолжительность звонка должна быть типа int") - if duration < 0: - raise ValueError("Продолжительность звонка не может быть отрицательным числом") - ... - - def charge(self, charging_percentage: int) -> None: - """ - Зарядка батареи смартфона. - - :param charging_percentage: Количество заряда для добавления - - :raise ValueError: Если количество добавляемого заряда превышает 100, то вызывается ошибка - :raise ValueError: Если количество добавляемого заряда меньше 0, то вызывается ошибка - - Примеры: - >>> phone = Smartphone("Samsung", 50) - >>> phone.charge(20) - """ - - if not isinstance(charging_percentage, int): - raise TypeError("Зарядка батареи должен быть типа int") - if (charging_percentage + self.battery_percentage) > 100: - raise ValueError("Зарядка батареи не может превышать максимальное значение заряда батареи") - if charging_percentage < 0: - raise ValueError("Зарядка батареи не может быть отрицательным числом") - ... - - -class Book: - """ - Класс, описывающий книгу. - """ - - def __init__(self, title: str, pages: int): - """ - Создание и подготовка к работе объекта "Книга" - - :param title: Название книги - :param pages: Количество страниц в книге - - :raise ValueError: Если количество страниц в книге меньше 1, то вызывается ошибка - - Примеры: - >>> book = Book("Портрет", 120) - """ - self.title = title - - if not isinstance(pages, int): - raise TypeError("Количество страниц должно быть типа int") - if pages < 1: - raise ValueError("Количество страниц не может быть меньше 1") - self.pages = pages - - def open_book(self, page_number: int) -> None: - """ - Открытие книги на указанной странице. - - :param page_number: Номер страницы для открытия - - :raise ValueError: Если номер страницы выходит за диапазон от 1 до количества страниц в книге, вызывается ошибка - - Примеры: - >>> book = Book("Руслан и Людмила", 300) - >>> book.open_book(50) - """ - if not isinstance(page_number, int): - raise TypeError("Количество страниц должно быть типа int") - if not 1 < page_number <= self.pages: - raise ValueError(f'Номер страницы должен быть в диапазоне от 1 до {self.pages}') - ... - - def get_info(self) -> str: - """ - Получение информации о книге. - - :return: Информация о книге - - Примеры: - >>> book = Book("Мёртвые души", 300) - >>> book.get_info() - 'Мёртвые души - 300 стр.' - """ - return f'{self.title} - {self.pages} стр.' - - -if __name__ == "__main__": - doctest.testmod() - pass diff --git "a/\320\233\320\260\320\261\320\276\321\200\320\260\321\202\320\276\321\200\320\275\320\260\321\217 \321\200\320\260\320\261\320\276\321\202\320\260 2/task_1.py" "b/\320\233\320\260\320\261\320\276\321\200\320\260\321\202\320\276\321\200\320\275\320\260\321\217 \321\200\320\260\320\261\320\276\321\202\320\260 2/task_1.py" new file mode 100644 index 0000000..b0e4ae2 --- /dev/null +++ "b/\320\233\320\260\320\261\320\276\321\200\320\260\321\202\320\276\321\200\320\275\320\260\321\217 \321\200\320\260\320\261\320\276\321\202\320\260 2/task_1.py" @@ -0,0 +1,38 @@ +BOOKS_DATABASE = [ + { + "id": 1, + "name": "test_name_1", + "pages": 200, + }, + { + "id": 2, + "name": "test_name_2", + "pages": 400, + } +] + + +class Book: + """Класс книга""" + + def __init__(self, id_: int, name: str, pages: int): + self.id_ = id_ + self.name = name + self.pages = pages + + def __str__(self) -> str: + return f'Книга "{self.name}"' + + def __repr__(self) -> str: + return f"{self.__class__.__name__}(id_={self.id_}, name='{self.name}', pages={self.pages})" + + +if __name__ == '__main__': + # инициализируем список книг + list_books = [ + Book(id_=book_dict["id"], name=book_dict["name"], pages=book_dict["pages"]) for book_dict in BOOKS_DATABASE + ] + for book in list_books: + print(book) # проверяем метод __str__ + + print(list_books) # проверяем метод __repr__ diff --git "a/\320\233\320\260\320\261\320\276\321\200\320\260\321\202\320\276\321\200\320\275\320\260\321\217 \321\200\320\260\320\261\320\276\321\202\320\260 2/task_2.py" "b/\320\233\320\260\320\261\320\276\321\200\320\260\321\202\320\276\321\200\320\275\320\260\321\217 \321\200\320\260\320\261\320\276\321\202\320\260 2/task_2.py" new file mode 100644 index 0000000..4a33115 --- /dev/null +++ "b/\320\233\320\260\320\261\320\276\321\200\320\260\321\202\320\276\321\200\320\275\320\260\321\217 \321\200\320\260\320\261\320\276\321\202\320\260 2/task_2.py" @@ -0,0 +1,62 @@ +from typing import Optional + +BOOKS_DATABASE = [ + { + "id": 1, + "name": "test_name_1", + "pages": 200, + }, + { + "id": 2, + "name": "test_name_2", + "pages": 400, + } +] + + +class Book: + """Класс Книга""" + + def __init__(self, id_: int, name: str, pages: int): + self.id_ = id_ + self.name = name + self.pages = pages + + def __str__(self) -> str: + return f'Книга "{self.name}"' + + def __repr__(self) -> str: + return f"{self.__class__.__name__}(id_={self.id_}, name='{self.name}', pages={self.pages})" + + +class Library: + """Класс Библиотека""" + + def __init__(self, books: Optional[list: Book] = None): + self.books = books + + def get_next_book_id(self): + if not self.books: + return 1 + else: + return self.books[-1].id_ + 1 + + def get_index_by_book_id(self, book_id: int): + for index, book in enumerate(self.books): + if book.id_ == book_id: + return index + else: + raise ValueError("Книги с запрашиваемым id не существует") + + +if __name__ == '__main__': + empty_library = Library() # инициализируем пустую библиотеку + print(empty_library.get_next_book_id()) # проверяем следующий id для пустой библиотеки + + list_books = [ + Book(id_=book_dict["id"], name=book_dict["name"], pages=book_dict["pages"]) for book_dict in BOOKS_DATABASE + ] + library_with_books = Library(books=list_books) # инициализируем библиотеку с книгами + print(library_with_books.get_next_book_id()) # проверяем следующий id для непустой библиотеки + + print(library_with_books.get_index_by_book_id(1)) # проверяем индекс книги с id = 1