Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from random import randint
- class Reader:
- def __init__(self, name, sname, budget):
- self.name = name
- self.sname = sname
- self.books = {}
- self.libraries = []
- self.budget = budget
- self.member_id = []
- @property
- def fullname(self):
- return f"{self.name} {self.sname}"
- @property
- def read_books(self):
- if self.books:
- res = ""
- for lib in self.libraries:
- if lib in self.books.values():
- x = f"{self.fullname} reads {', '.join(book.name for book in self.books if self.books[book] == lib)} from {lib.name} library\n"
- else:
- x = f"{self.fullname} does not read any book from {lib.name}\n"
- res += x
- return res
- return f"{self.fullname} does not read any book currently"
- def take_book(self, library, book):
- if book not in self.books and book in library.books and self.budget >= book.price and self in library.members:
- self.books[book] = library
- self.budget -= book.price
- library.budget += book.price
- library.books.remove(book)
- else:
- print(f"{self.fullname} cannot take {book.name} from {library.name}")
- def return_book(self, library, book):
- if book in self.books:
- if book not in library.books and library in book.libraries:
- del self.books[book]
- book.reader = None
- library.books.append(book)
- else:
- print("Book does not belong to this library")
- else:
- print(f"{self.fullname} did not take {book.name} from {library.name}")
- def buy_membership(self, library):
- if library.membership_price <= self.budget:
- self.budget -= library.membership_price
- self.member_id.append(library.create_id())
- library.add_member(self)
- self.libraries.append(library)
- class Library:
- def __init__(self, name, books, budget, membership_price):
- self.name = name
- self.books = books
- self.budget = budget
- self.membership_price = membership_price
- self.members = []
- for b in books:
- b.libraries.append(self)
- def info(self):
- for b in self.books:
- if b.reader:
- print(f"{b.name} is being read by {b.reader.fullname}")
- else:
- print(f"{b.name} is available now")
- @property
- def available_books(self):
- if self.books:
- return f"{', '.join(b.name for b in self.books if b in self.books)} available at {self.name}"
- return f"{self.name} has no available books"
- def add_book(self, book):
- self.books.append(book)
- self.budget -= book.price
- book.libraries.append(self)
- def sell_book(self, book):
- if book in self.books and self in book.libraries and book in self.books:
- self.books.remove(book)
- self.budget += book.price
- book.libraries.remove(self)
- else:
- print(f"{self.name} cannot sell this book")
- def add_member(self, reader):
- self.budget += self.membership_price
- self.members.append(reader)
- def create_id(self):
- idd = self.name[:2].upper()
- for i in range(8):
- idd += str(randint(0, 10))
- idd += self.name[-1].upper()
- return idd
- class Book:
- def __init__(self, name, author, price):
- self.name = name
- self.author = author
- self.price = price
- self.libraries = []
- sefiller = Book("Sefiller", "Victor Hugo", 10)
- inferno = Book("Inferno", "Dan Brown", 7)
- kapital = Book("Kapital", "Karl Marx", 9)
- ana = Book("Ana", "Maksim Gorki", 50)
- sapiens = Book("Sapiens", "Yuval Noah Harari", 25)
- childhood = Book("Childhood", "Lev Tolstoy", 20)
- kitab = Book("Kitab", "A Person", 50)
- bakixanov = Library("Bakixanov", [sefiller, inferno, kapital, ana, kitab], 1000, 15)
- bakumoz = Library("Bakumoz", [ana, kapital, sapiens], 400, 25)
- building = Library("Building", [inferno, sefiller, kapital], 200, 26)
- vusala = Reader("Vusala", "Alakbarova", 150)
- vusal = Reader("Vusal", "Alakbarov", 120)
- vusala.buy_membership(bakixanov)
- vusala.buy_membership(bakumoz)
- vusal.buy_membership(bakumoz)
- print()
- vusala.take_book(bakixanov, kapital)
- vusal.return_book(bakumoz, kapital)
- print()
- vusala.take_book(building, sefiller)
- print()
- print(bakixanov.available_books)
- bakixanov.add_book(childhood)
- print(bakixanov.available_books)
- bakixanov.sell_book(childhood)
- print(bakixanov.available_books)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement