From cc24339859ab8ada5b531429ac92779cac7f9034 Mon Sep 17 00:00:00 2001 From: stud203992 Date: Wed, 6 May 2026 21:01:53 +0300 Subject: [PATCH] all code --- codee.py | 181 ++++++++++++++++++++++++++++++++++++++++++++++--- data/books.txt | 15 ++++ 2 files changed, 186 insertions(+), 10 deletions(-) create mode 100644 data/books.txt diff --git a/codee.py b/codee.py index 868899c..e89dcdf 100644 --- a/codee.py +++ b/codee.py @@ -1,34 +1,195 @@ +import os + def load_books(file_path): - return None + """Загружает книги из файла в список словарей.""" + books = [] + try: + with open(file_path, 'r', encoding='utf-8') as file: + for line in file: + line = line.strip() + if not line: + continue + parts = line.split(',') + if len(parts) == 6: + book = { + 'title': parts[0].strip(), + 'author': parts[1].strip(), + 'year': int(parts[2].strip()), + 'genre': parts[3].strip(), + 'rating': int(parts[4].strip()), + 'pages': int(parts[5].strip()) + } + books.append(book) + except FileNotFoundError: + print(f"Файл {file_path} не найден.") + except Exception as e: + print(f"Ошибка при чтении: {e}") + return books def filter_by_genre(books, genre): - return None + """Возвращает список книг указанного жанра.""" + result = [] + for book in books: + if book['genre'].lower() == genre.lower(): + result.append(book) + return result def get_books_by_author(books, author): - return None + """Возвращает список книг указанного автора.""" + result = [] + for book in books: + if book['author'].lower() == author.lower(): + result.append(book) + return result def calculate_average_rating(books): - return None + """Вычисляет средний рейтинг книг.""" + if not books: + return 0.0 + total = 0 + for book in books: + total += book['rating'] + average = total / len(books) + return round(average, 2) def get_longest_book(books): - return None + """Находит книгу с наибольшим количеством страниц.""" + if not books: + return None + longest = books[0] + for book in books: + if book['pages'] > longest['pages']: + longest = book + return longest def count_books_by_decade(books): - return None + """Подсчитывает количество книг по десятилетиям издания.""" + decades = {} + for book in books: + decade = (book['year'] // 10) * 10 + if decade in decades: + decades[decade] += 1 + else: + decades[decade] = 1 + return decades def get_top_rated_books(books, n): - return None + """Возвращает топ-N книг с самым высоким рейтингом.""" + if not books: + return [] + sorted_books = sorted(books, key=lambda b: b['rating'], reverse=True) + result = [] + for i in range(min(n, len(sorted_books))): + result.append(sorted_books[i]) + return result def find_books_by_title_keyword(books, keyword): - return None + """Ищет книги, в названии которых есть ключевое слово.""" + result = [] + keyword_lower = keyword.lower() + for book in books: + if keyword_lower in book['title'].lower(): + result.append(book) + return result def generate_genre_report(books): - return None + """Генерирует отчёт: по каждому жанру — количество книг и средний рейтинг.""" + temp = {} + for book in books: + genre = book['genre'] + if genre not in temp: + temp[genre] = {'count': 0, 'total_rating': 0} + temp[genre]['count'] += 1 + temp[genre]['total_rating'] += book['rating'] + + report = {} + for genre, data in temp.items(): + avg = data['total_rating'] / data['count'] + report[genre] = { + 'count': data['count'], + 'avg_rating': round(avg, 2) + } + return report def save_statistics(stats, file_path): - return None + """Сохраняет статистику в текстовый файл.""" + try: + folder = os.path.dirname(file_path) + if folder: + os.makedirs(folder, exist_ok=True) + + with open(file_path, 'w', encoding='utf-8') as file: + file.write("ОТЧЕТ ПО БИБЛИОТЕКЕ\n") + file.write("=" * 40 + "\n\n") + for genre, data in stats.items(): + file.write(f"{genre}:\n") + file.write(f" Книг: {data['count']}\n") + file.write(f" Средний рейтинг: {data['avg_rating']}\n\n") + file.write("=" * 40 + "\n") + file.write("Конец отчета\n") + print(f"Отчет сохранен: {file_path}") + except Exception as e: + print(f"Ошибка при сохранении: {e}") def main(): + """Главная функция.""" + print("Система управления библиотекой") + print("-" * 40) + + # Загружаем данные + books = load_books('data/books.txt') + + if not books: + print("Нет данных для работы.") + return + + print(f"Загружено книг: {len(books)}") + + # 1. Генерируем и сохраняем отчёт по жанрам + genre_report = generate_genre_report(books) + save_statistics(genre_report, 'reports/library_report.txt') + + # 2. Самая длинная книга + longest = get_longest_book(books) + if longest: + print(f"Самая длинная книга: \"{longest['title']}\" — {longest['pages']} стр.") + + # 3. Топ-3 по рейтингу + print("\nТоп-3 книги по рейтингу:") + top_books = get_top_rated_books(books, 3) + for i, book in enumerate(top_books, 1): + print(f" {i}. \"{book['title']}\" — рейтинг {book['rating']}") + + # 4. Поиск по ключевому слову + keyword = input("\nВведите слово для поиска в названии: ").strip() + if keyword: + found = find_books_by_title_keyword(books, keyword) + if found: + print(f"Найдено книг: {len(found)}") + for book in found[:5]: + print(f" - \"{book['title']}\" — {book['author']}") + if len(found) > 5: + print(f" ... и ещё {len(found) - 5}") + else: + print("Ничего не найдено.") + + # 5. Статистика по десятилетиям + print("\nКниги по десятилетиям:") + decades = count_books_by_decade(books) + for decade in sorted(decades.keys()): + print(f" {decade}-е годы: {decades[decade]} книг") + + # 6. Дополнительная демонстрация функций + print("\nДополнительно:") + avg = calculate_average_rating(books) + print(f" Средний рейтинг всех книг: {avg}/5") + + fantasy = filter_by_genre(books, "Фэнтези") + print(f" Книг в жанре 'Фэнтези': {len(fantasy)}") + + tolstoy = get_books_by_author(books, "Лев Толстой") + print(f" Книг автора 'Лев Толстой': {len(tolstoy)}") + print("\nПрограмма завершена.") if __name__ == "__main__": diff --git a/data/books.txt b/data/books.txt new file mode 100644 index 0000000..130d835 --- /dev/null +++ b/data/books.txt @@ -0,0 +1,15 @@ +Война и мир,Лев Толстой,1869,Роман,5,1225 +Преступление и наказание,Федор Достоевский,1866,Роман,5,672 +Мастер и Маргарита,Михаил Булгаков,1967,Роман,5,480 +Евгений Онегин,Александр Пушкин,1833,Роман в стихах,4,352 +Мертвые души,Николай Гоголь,1842,Поэма,4,352 +Гарри Поттер и философский камень,Джоан Роулинг,1997,Фэнтези,5,432 +Гарри Поттер и Тайная комната,Джоан Роулинг,1998,Фэнтези,5,480 +Властелин колец,Джон Толкин,1954,Фэнтези,5,1137 +1984,Джордж Оруэлл,1949,Антиутопия,5,328 +Три товарища,Эрих Ремарк,1936,Роман,4,480 +Над пропастью во ржи,Джером Сэлинджер,1951,Роман,4,256 +Собачье сердце,Михаил Булгаков,1925,Повесть,5,128 +Анна Каренина,Лев Толстой,1877,Роман,5,864 +Двенадцать стульев,Илья Ильф,1928,Роман,4,416 +Золотой теленок,Илья Ильф,1931,Роман,4,480 \ No newline at end of file