11import json
22import os
33
4- def load_books (filename = 'library.json' ):
4+
5+ def load_books (filename = "library.json" ):
56 """
67 Загрузка списка книг из JSON-файла.
78 Возвращает список книг (каждая книга - это словарь).
89 """
910 if not os .path .isfile (filename ):
1011 return []
11- with open (filename , 'r' , encoding = ' utf-8' ) as file :
12+ with open (filename , "r" , encoding = " utf-8" ) as file :
1213 try :
1314 return json .load (file )
1415 except json .JSONDecodeError :
1516 return []
1617
17- def save_books (books , filename = 'library.json' ):
18+
19+ def save_books (books , filename = "library.json" ):
1820 """
1921 Сохранение списка книг в JSON-файл.
2022 """
21- with open (filename , 'w' , encoding = ' utf-8' ) as file :
23+ with open (filename , "w" , encoding = " utf-8" ) as file :
2224 json .dump (books , file , ensure_ascii = False , indent = 4 )
2325
26+
2427def list_books (books ):
2528 """
2629 Возвращает строку со списком всех книг.
@@ -29,29 +32,30 @@ def list_books(books):
2932 return "Библиотека пуста."
3033 result_lines = []
3134 for idx , book in enumerate (books , start = 1 ):
32- result_lines .append (f"{ idx } . { book ['title' ]} | { book ['author' ]} | { book ['year' ]} " )
35+ result_lines .append (
36+ f"{ idx } . { book ['title' ]} | { book ['author' ]} | { book ['year' ]} "
37+ )
3338 return "\n " .join (result_lines )
3439
40+
3541def add_book (books , title , author , year ):
3642 """
3743 Принимает текущий список книг и данные о новой книге.
3844 Возвращает новый список, в котором добавлена новая книга.
3945 """
40- new_book = {
41- 'title' : title ,
42- 'author' : author ,
43- 'year' : year
44- }
46+ new_book = {"title" : title , "author" : author , "year" : year }
4547 # Создаём НОВЫЙ список, добавляя new_book
4648 return books + [new_book ]
4749
50+
4851def remove_book (books , title ):
4952 """
5053 Принимает текущий список книг и название книги для удаления.
5154 Возвращает новый список без книги, у которой совпадает название.
5255 """
5356 # Фильтруем список: оставляем только те книги, у которых название не совпадает с переданным
54- return [book for book in books if book ['title' ].lower () != title .lower ()]
57+ return [book for book in books if book ["title" ].lower () != title .lower ()]
58+
5559
5660def search_books (books , keyword ):
5761 """
@@ -60,13 +64,16 @@ def search_books(books, keyword):
6064 """
6165 keyword_lower = keyword .lower ()
6266 return [
63- book for book in books
64- if keyword_lower in book ['title' ].lower () or keyword_lower in book ['author' ].lower ()
67+ book
68+ for book in books
69+ if keyword_lower in book ["title" ].lower ()
70+ or keyword_lower in book ["author" ].lower ()
6571 ]
6672
73+
6774def main ():
6875 """
69- Точка входа в программу: здесь мы загружаем книги,
76+ Точка входа в программу: здесь мы загружаем книги,
7077 показываем меню и обрабатываем ввод пользователя.
7178 """
7279 books = load_books () # Загрузили список книг из JSON
@@ -81,11 +88,11 @@ def main():
8188
8289 choice = input ("Выберите действие (1-5): " ).strip ()
8390
84- if choice == '1' :
91+ if choice == "1" :
8592 print ("\n Список книг:" )
8693 print (list_books (books ))
8794
88- elif choice == '2' :
95+ elif choice == "2" :
8996 print ("\n Добавление новой книги:" )
9097 title = input ("Введите название: " ).strip ()
9198 author = input ("Введите автора: " ).strip ()
@@ -97,9 +104,11 @@ def main():
97104 save_books (books ) # Сразу сохраняем в файл
98105 print ("Книга добавлена!" )
99106
100- elif choice == '3' :
107+ elif choice == "3" :
101108 print ("\n Удаление книги:" )
102- title_to_remove = input ("Введите название книги, которую хотите удалить: " ).strip ()
109+ title_to_remove = input (
110+ "Введите название книги, которую хотите удалить: "
111+ ).strip ()
103112
104113 new_books = remove_book (books , title_to_remove )
105114 if len (new_books ) < len (books ):
@@ -109,22 +118,25 @@ def main():
109118 else :
110119 print ("Книга с таким названием не найдена." )
111120
112- elif choice == '4' :
121+ elif choice == "4" :
113122 print ("\n Поиск книг:" )
114- keyword = input ("Введите ключевое слово для поиска (в названии или авторе): " ).strip ()
123+ keyword = input (
124+ "Введите ключевое слово для поиска (в названии или авторе): "
125+ ).strip ()
115126 found_books = search_books (books , keyword )
116127 if found_books :
117128 print ("\n Найденные книги:" )
118129 print (list_books (found_books ))
119130 else :
120131 print ("Ничего не найдено." )
121132
122- elif choice == '5' :
133+ elif choice == "5" :
123134 print ("Выход из программы." )
124135 break
125136
126137 else :
127138 print ("Некорректный ввод. Попробуйте ещё раз." )
128139
140+
129141if __name__ == "__main__" :
130142 main ()
0 commit comments