Book хранит данные и форматирует info, Library управляет коллекцией и поиском. Правило удаления по названию задайте явно: ниже удаляется первое совпадение.
Создание классов Book и Library по заданному использованию
Book хранит данные и форматирует info, Library управляет коллекцией и поиском. Правило удаления по названию задайте явно: ниже удаляется первое совпадение.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
На основе приведённого примера реализуйте два класса — Book и Library — так, чтобы скрипт корректно выполнялся.
library = Library()
book1 = Book("1984", "George Orwell", 1949)
book2 = Book("To Kill a Mockingbird", "Harper Lee", 1960)
book3 = Book("Brave New World", "Aldous Huxley", 1932)
library.add_book(book1)
library.add_book(book2)
library.add_book(book3)
print("Все книги в библиотеке:")
library.show_books()
print("\nКниги автора 'George Orwell':")
orwell_books = library.find_by_author("George Orwell")
for book in orwell_books:
print(book.info())
library.remove_book("1984")
print("\nПосле удаления '1984':")
library.show_books()
Ответ
Book хранит данные и форматирует info, Library управляет коллекцией и поиском. Правило удаления по названию задайте явно: ниже удаляется первое совпадение.
from dataclasses import dataclass
@dataclass
class Book:
title: str
author: str
year: int
def info(self):
return f'{self.title} — {self.author}, {self.year}'
class Library:
def __init__(self):
self.books = []
def add_book(self, book):
self.books.append(book)
def show_books(self):
for book in self.books:
print(book.info())
def find_by_author(self, author):
return [book for book in self.books if book.author == author]
def remove_book(self, title):
for index, book in enumerate(self.books):
if book.title == title:
return self.books.pop(index)
return None
Сопоставление автора и названия регистрозависимое. В реальной библиотеке название не уникально: для точного удаления лучше отдельный идентификатор книги или экземпляра.