Last active
November 24, 2024 13:08
-
-
Save gdsotirov/ef9499fbb2448ae1128c5a5974231255 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #Представи си, че създаваш система за управление на библиотека. Искаш да можеш да добавяш книги в библиотеката, | |
| #да наемаш книги, и да проверяваш наличността на книгите. | |
| # Методи на класа Book:| | |
| # 1.Отпечатва информация за книгата вьв формат „Заглавие: ..., Автор: ..., Година: ..." | |
| # 2.Ако книгата е налична, променя is_available на False и отпечатва сьобщение „Вие наехте книгата «заглавие>". | |
| #Ако книгата вече е заета, изписва сьобщение „Книгата ‹заглавие > вече е заета." | |
| # 3.Променя is_available обратно на True и отпечатва съобщение „Вие върнахте книгата ‹заглавие>". | |
| # Методи на класа Library: | |
| # 1.Добавя книга кьм библиотеката. | |
| # 2.Отпечатва заглавията на всички налични книги. | |
| # 3.Трси книга по заглавие и ако е налична, позволява на потребителя да я наеме | |
| # 4.Тьрси книга по заглавие и позволява на потребителя да я върне | |
| # • Ограничение на броя на книгите, които може да наеме един читател: Добавяме поле което не позволява на | |
| #потребител да наеме повече от 3 книги наведньж. Ако читателят се опита да наеме четврта книга, програмата | |
| #извежда сьобщение за ограничението. | |
| # • Списьк на заетите книги и тяхната наличност: метод които извежда заглавията и имената на всички книги, | |
| #които са заети. | |
| # • Тьрсене на книги по автор или част от заглавие: Метод които позволява на потребителя да торси книги по | |
| #автор или част от заглавие. Ако има сьвпадение, книгите се извеждат на екрана; ако няма, се извежда сьобщение | |
| #„Няма намерени книги по зададения критерий."| | |
| # • Брояч на заеманията на всяка книга: Поле което показва колко пьти е била заемана всяка книга. В огон | |
| #() увеличаваме броя с 1 всеки пьт, когато книгата е наета. | |
| import re | |
| class Book: | |
| def __init__(self, title, author, year): | |
| self.title = title | |
| self.author = author | |
| self.year = year | |
| self.is_available = True | |
| self.rent_count = 0 | |
| def print(self): | |
| print(f'Заглавие: {self.title}, Автор: {self.author}, Година: {self.year}') | |
| def rent_book(self): | |
| if self.is_available: | |
| self.is_available = False | |
| self.rent_count += 1 | |
| print(f"Вие наехте книгата \"{self.title}\".") | |
| else: | |
| print(f"Книгата \"{self.title}\" вече е заета.") | |
| def return_book(self): | |
| if not self.is_available: | |
| self.is_available = True | |
| print(f"Вие върнахте книгата \"{self.title}\".") | |
| else: | |
| print(f"Книгата \"{self.title}\" не е наета.") | |
| class Library: | |
| books = [] | |
| readers = {} | |
| def add_book(self, book): | |
| self.books.append(book) | |
| print(f"Книгата \"{book.title}\" беше добавена към библиотеката.") | |
| def add_reader(self, reader): | |
| if reader in self.readers.keys(): | |
| self.readers[reader] += 1 | |
| else: | |
| self.readers[reader] = 1 | |
| def all_books(self): | |
| print("Всички книги:") | |
| for book in self.books: | |
| print(f"- {book.title}") | |
| def available_books(self): | |
| print("Налични книги:") | |
| num = 0 | |
| for book in self.books: | |
| if book.is_available: | |
| num += 1 | |
| print(f"- {book.title}") | |
| if num == 0: | |
| print("Няма налични книги в библиотеката.") | |
| def find_book(self, title, reader): | |
| for book in self.books: | |
| if book.title == title: | |
| if book.is_available: | |
| if self.readers.get(reader, 0) + 1 > 3: | |
| print(f"{reader} you already rented 3 books!") | |
| else: | |
| book.rent_book() | |
| self.add_reader(reader) | |
| else: | |
| book.return_book() | |
| self.remove_reader(reader) | |
| def rented_books(self): | |
| print("Наети книги:") | |
| num = 0 | |
| for book in self.books: | |
| if not book.is_available: | |
| num += 1 | |
| print(f"- {book.title}") | |
| if num == 0: | |
| print("Няма наети книги от библиотеката.") | |
| def remove_reader(self, reader): | |
| if reader in self.readers.keys(): | |
| self.readers[reader] -= 1 | |
| else: | |
| self.readers[reader] = 0 | |
| def search_book(self, str): | |
| found = False | |
| for book in self.books: | |
| if re.search(str, book.title) or re.search(str, book.author): | |
| found = True | |
| print("Found: ", end="") | |
| book.print() | |
| if not found: | |
| print("Няма намерени книги по зададения критерий.") | |
| b1 = Book("Book 1", "Author 1", 2001) | |
| b2 = Book("Book 2", "Author 2", 2002) | |
| b3 = Book("Book 3", "Author 3", 2003) | |
| b4 = Book("Book 4", "Author 4", 2004) | |
| b5 = Book("Book 5", "Author 5", 2005) | |
| lib = Library() | |
| lib.add_book(b1) | |
| lib.add_book(b2) | |
| lib.add_book(b3) | |
| lib.add_book(b4) | |
| lib.add_book(b5) | |
| reader = '' | |
| while True: | |
| if reader == '': | |
| reader = input(f"Моля, въведете името си: ") | |
| print(f"Добре дошъл {reader}!") | |
| print("a - налични, f - намиране, e - изход, n - нов читател, s - търсене") | |
| action = input("Вашият избор? ") | |
| match action: | |
| case 'a': | |
| lib.available_books() | |
| continue | |
| case 'f': | |
| title = input("Заглавие: ") | |
| lib.find_book(title, reader) | |
| continue | |
| case 'e': | |
| print("Край.") | |
| break | |
| case 'n': | |
| reader = '' | |
| continue | |
| case 's': | |
| str = input("Търсене за: ") | |
| lib.search_book(str) | |
| continue |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment