Untitled

mail@pastecode.io avatar
unknown
plain_text
18 days ago
3.5 kB
3
Indexable
Never
class Book:
    def __init__(self, title, author, description, series=None):
        self.title = title
        self.author = author
        self.description = description
        self.series = series  # Reference to a Series object if the book is part of a series

    def __str__(self):
        return "Book"


class PhysicalBook(Book):
    def __init__(self, title, author, description, isbn, series=None):
        super().__init__(title, author, description, series)
        self.isbn = isbn  # ISBN is specific to physical books

    def __str__(self):
        return "PBook"

class Ebook(Book):
    def __init__(self, title, author, description, series=None):
        super().__init__(title, author, description, series)

    def __str__(self):
        return "EBook"

class Series:
    def __init__(self, title, author, description):
        self.title = title
        self.author = author
        self.description = description
        self.books = []  # List to store the books in the series

    def add_book(self, book):
        self.books.append(book)

    def __str__(self):
        print("Series")


class BookOrganizer:
    def __init__(self):
        self.books = []  # List of all books (both physical and ebooks)
        self.series_list = []  # List of all seriesuh
    
    def add_book(self, book):
        self.books.append(book)
    
    def add_series(self, series):
        self.series_list.append(series)
    
    def search_by_title(self, title):
        return [book for book in self.books if book.title.lower() == title.lower()]
    
    def search_by_author(self, author):
        return [book for book in self.books if book.author.lower() == author.lower()]
    
    def search_by_isbn(self, isbn):
        return [book for book in self.books if isinstance(book, PhysicalBook) and book.isbn == isbn]
    
    def delete_by_isbn(self, isbn):
        self._deleteList(self.books, isbn)
        for series in self.series_list:
            self._deleteList(series.books, isbn)


    def _deleteList(self, books, isbn):
        idxToRemove = []
        for idx in range(len(books)):
            book = books[idx]
            if isinstance(book, PhysicalBook) and book.isbn == isbn:
                idxToRemove.append(idx)
        for idx in idxToRemove:
            del inputList[idx]

    def get_num_ebooks(self):
        return len([book for book in self.books if isinstance(book, Ebook)])
    

    def list_books_in_series(self, series_title):
        for series in self.series_list:
            if series.title.lower() == series_title.lower():
                return series.books
        return None


# Create Series
harry_potter_series = Series("Harry Potter", "J.K. Rowling", "A young wizard's journey")

# Create Books
book1 = PhysicalBook("Harry Potter and the Philosopher's Stone", "J.K. Rowling", "First book of Harry Potter", "978-3-16-148410-0", harry_potter_series)
book2 = Ebook("Harry Potter and the Chamber of Secrets", "J.K. Rowling", "Second book of Harry Potter", harry_potter_series)

# Add books to series
harry_potter_series.add_book(book1)
harry_potter_series.add_book(book2)

# Add to Catalog
catalog = BookOrganizer()
catalog.add_book(book1)
catalog.add_book(book2)
catalog.add_series(harry_potter_series)

# Search in catalog
print(catalog.search_by_title("Harry Potter and the Philosopher's Stone"))
print(catalog.list_books_in_series("Harry Potter"))

for book in catalog.search_by_title("Harry Potter and the Philosopher's Stone"):
    print(book)
Leave a Comment