ICC-P Cours 13, exemple 1, Library
Code:
from dataclasses import dataclass
from typing import Callable
@dataclass
class Book:
title: str
author: str
isbn: str
is_available: bool = True
@dataclass
class Library:
books: dict[str, Book]
def add_book(self, b: Book) -> None:
self.books[b.isbn] = b
def borrow_book(self, isbn: str) -> str:
if isbn not in self.books:
return f"Sorry, this book ({isbn}) is not in our library."
b: Book = self.books[isbn]
if not b.is_available:
return f"Sorry, '{b.title}' is currently not available."
b.is_available = False
return f"You have borrowed '{b.title}' by {b.author}."
def return_book(self, isbn: str) -> str:
if isbn not in self.books:
return "This book does not belong to our library."
b: Book = self.books[isbn]
b.is_available = True
return f"Thank you for returning '{b.title}'."
def display_books(self, sort_by: None | Callable[[Book], str] = None) -> None:
iterable = list(self.books.values())
if sort_by is not None:
iterable = sorted(iterable, key=sort_by)
for b in iterable:
print("Book:")
print(f" Title: {b.title}")
print(f" Author: {b.author}")
print(f" ISBN: {b.isbn}")
print(f" Available: {b.is_available}")
print("**")
library = Library({})
# # Adding books
library.add_book(Book(title="1984", author="George Orwell", isbn="2345678901"))
library.add_book(Book(title="To Kill a Mockingbird", author="Harper Lee", isbn="1234567890"))
# # Displaying books
library.display_books()
print("--------------------")
# Borrowing a book
print(library.borrow_book("123456789"))
print(library.borrow_book("1234567890"))
print(library.borrow_book("1234567890")) # Trying to borrow again
# # Returning a book
print(library.return_book("1234567890"))
print(library.return_book("1234567890")) # Returning again
print("--------------------")
# # Displaying books again
library.display_books(sort_by=lambda b: b.isbn)
from typing import Callable
@dataclass
class Book:
title: str
author: str
isbn: str
is_available: bool = True
@dataclass
class Library:
books: dict[str, Book]
def add_book(self, b: Book) -> None:
self.books[b.isbn] = b
def borrow_book(self, isbn: str) -> str:
if isbn not in self.books:
return f"Sorry, this book ({isbn}) is not in our library."
b: Book = self.books[isbn]
if not b.is_available:
return f"Sorry, '{b.title}' is currently not available."
b.is_available = False
return f"You have borrowed '{b.title}' by {b.author}."
def return_book(self, isbn: str) -> str:
if isbn not in self.books:
return "This book does not belong to our library."
b: Book = self.books[isbn]
b.is_available = True
return f"Thank you for returning '{b.title}'."
def display_books(self, sort_by: None | Callable[[Book], str] = None) -> None:
iterable = list(self.books.values())
if sort_by is not None:
iterable = sorted(iterable, key=sort_by)
for b in iterable:
print("Book:")
print(f" Title: {b.title}")
print(f" Author: {b.author}")
print(f" ISBN: {b.isbn}")
print(f" Available: {b.is_available}")
print("**")
library = Library({})
# # Adding books
library.add_book(Book(title="1984", author="George Orwell", isbn="2345678901"))
library.add_book(Book(title="To Kill a Mockingbird", author="Harper Lee", isbn="1234567890"))
# # Displaying books
library.display_books()
print("--------------------")
# Borrowing a book
print(library.borrow_book("123456789"))
print(library.borrow_book("1234567890"))
print(library.borrow_book("1234567890")) # Trying to borrow again
# # Returning a book
print(library.return_book("1234567890"))
print(library.return_book("1234567890")) # Returning again
print("--------------------")
# # Displaying books again
library.display_books(sort_by=lambda b: b.isbn)
Last modified: Monday, 27 May 2024, 17:00