Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2020
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.68 KB | None | 0 0
  1. from random import randint
  2.  
  3.  
  4. class Reader:
  5.     def __init__(self, name, sname, budget):
  6.         self.name = name
  7.         self.sname = sname
  8.         self.books = {}
  9.         self.libraries = []
  10.         self.budget = budget
  11.         self.member_id = []
  12.  
  13.     @property
  14.     def fullname(self):
  15.         return f"{self.name} {self.sname}"
  16.  
  17.     @property
  18.     def read_books(self):
  19.         if self.books:
  20.             res = ""
  21.             for lib in self.libraries:
  22.                 if lib in self.books.values():
  23.                     x = f"{self.fullname} reads {', '.join(book.name for book in self.books if self.books[book] == lib)} from {lib.name} library\n"
  24.                 else:
  25.                     x = f"{self.fullname} does not read any book from {lib.name}\n"
  26.                 res += x
  27.             return res
  28.         return f"{self.fullname} does not read any book currently"
  29.  
  30.     def take_book(self, library, book):
  31.         if book not in self.books and book in library.books and self.budget >= book.price and self in library.members:
  32.             self.books[book] = library
  33.             self.budget -= book.price
  34.             library.budget += book.price
  35.             library.books.remove(book)
  36.         else:
  37.             print(f"{self.fullname} cannot take {book.name} from {library.name}")
  38.  
  39.     def return_book(self, library, book):
  40.         if book in self.books:
  41.             if book not in library.books and library in book.libraries:
  42.                 del self.books[book]
  43.                 book.reader = None
  44.                 library.books.append(book)
  45.             else:
  46.                 print("Book does not belong to this library")
  47.         else:
  48.             print(f"{self.fullname} did not take {book.name} from {library.name}")
  49.  
  50.     def buy_membership(self, library):
  51.         if library.membership_price <= self.budget:
  52.             self.budget -= library.membership_price
  53.             self.member_id.append(library.create_id())
  54.             library.add_member(self)
  55.             self.libraries.append(library)
  56.  
  57.  
  58. class Library:
  59.     def __init__(self, name, books, budget, membership_price):
  60.         self.name = name
  61.         self.books = books
  62.         self.budget = budget
  63.         self.membership_price = membership_price
  64.         self.members = []
  65.         for b in books:
  66.             b.libraries.append(self)
  67.  
  68.     def info(self):
  69.         for b in self.books:
  70.             if b.reader:
  71.                 print(f"{b.name} is being read by {b.reader.fullname}")
  72.             else:
  73.                 print(f"{b.name} is available now")
  74.  
  75.     @property
  76.     def available_books(self):
  77.         if self.books:
  78.             return f"{', '.join(b.name for b in self.books if b in self.books)} available at {self.name}"
  79.         return f"{self.name} has no available books"
  80.  
  81.     def add_book(self, book):
  82.         self.books.append(book)
  83.         self.budget -= book.price
  84.         book.libraries.append(self)
  85.  
  86.     def sell_book(self, book):
  87.         if book in self.books and self in book.libraries and book in self.books:
  88.             self.books.remove(book)
  89.             self.budget += book.price
  90.             book.libraries.remove(self)
  91.         else:
  92.             print(f"{self.name} cannot sell this book")
  93.  
  94.     def add_member(self, reader):
  95.         self.budget += self.membership_price
  96.         self.members.append(reader)
  97.  
  98.     def create_id(self):
  99.         idd = self.name[:2].upper()
  100.         for i in range(8):
  101.             idd += str(randint(0, 10))
  102.         idd += self.name[-1].upper()
  103.         return idd
  104.  
  105.  
  106. class Book:
  107.     def __init__(self, name, author, price):
  108.         self.name = name
  109.         self.author = author
  110.         self.price = price
  111.         self.libraries = []
  112.  
  113.  
  114. sefiller = Book("Sefiller", "Victor Hugo", 10)
  115. inferno = Book("Inferno", "Dan Brown", 7)
  116. kapital = Book("Kapital", "Karl Marx", 9)
  117. ana = Book("Ana", "Maksim Gorki", 50)
  118. sapiens = Book("Sapiens", "Yuval Noah Harari", 25)
  119. childhood = Book("Childhood", "Lev Tolstoy", 20)
  120. kitab = Book("Kitab", "A Person", 50)
  121.  
  122. bakixanov = Library("Bakixanov", [sefiller, inferno, kapital, ana, kitab], 1000, 15)
  123. bakumoz = Library("Bakumoz", [ana, kapital, sapiens], 400, 25)
  124. building = Library("Building", [inferno, sefiller, kapital], 200, 26)
  125.  
  126. vusala = Reader("Vusala", "Alakbarova", 150)
  127. vusal = Reader("Vusal", "Alakbarov", 120)
  128.  
  129. vusala.buy_membership(bakixanov)
  130. vusala.buy_membership(bakumoz)
  131. vusal.buy_membership(bakumoz)
  132. print()
  133. vusala.take_book(bakixanov, kapital)
  134. vusal.return_book(bakumoz, kapital)
  135. print()
  136. vusala.take_book(building, sefiller)
  137. print()
  138. print(bakixanov.available_books)
  139. bakixanov.add_book(childhood)
  140. print(bakixanov.available_books)
  141. bakixanov.sell_book(childhood)
  142. print(bakixanov.available_books)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement