Menu
Coddy logo textTech

BookクラスとUserクラス

CoddyのPythonジャーニー「Object Oriented Programming」セクションの一部 — レッスン 56/64。

challenge icon

チャレンジ

簡単

このチャレンジでは、包括的なテストカバレッジを備えたマルチファイル構造を使用して、図書館管理システム用の Book クラスを実装します。

TODO コメントに従って Book クラスを実装するために book.py を編集してください。実装は以下の要件を満たす必要があります:

  1. title、author、および ISBN パラメータを使用して初期化する
  2. 利用可能状況と借用者情報を追跡する
  3. 適切な文字列表現を実装する

チートシート

この課題は、図書館管理システム用の Book クラスの実装に焦点を当てています。このクラスは、本の初期化、貸出状況と借用者情報の追跡、および適切な文字列表現の提供を処理する必要があります。

実装すべき主要なコンポーネント:

  • title、author、および ISBN パラメータを使用して初期化する
  • 貸出状況と借用者情報を追跡する
  • 適切な文字列表現メソッドを実装する

自分で試してみよう

from book import Book
from library import Library

# 包括的なテストケースハンドラー
test_case = input()

if test_case == "create_book":
    library = Library("Community Library")
    title = "Title"
    author = "Author"
    isbn = "ISBN"
    
    book = Book(title, author, isbn)
    print(book)
    
elif test_case == "add_to_library":
    library = Library("Community Library")
    
    book1 = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
    book2 = Book("To Kill a Mockingbird", "Harper Lee", "789012")
    
    library.add_book(book1)
    library.add_book(book2)
    
    print(f"Library has {len(library.books)} books")
    print(f"Book 1: {library.books[0]}")
    print(f"Book 2: {library.books[1]}")

elif test_case == "book_availability":
    book = Book("1984", "George Orwell", "345678")
    print(f"Initial availability: {book.available}")
    
    # 利用可能性を変更
    book.available = False
    print(f"After change: {book.available}")
    print(book)  # "Not Available" と表示されるはず

elif test_case == "empty_values":
    book = Book("", "", "")
    print(book)
    library = Library("")
    library.add_book(book)
    print(library)

elif test_case == "special_characters":
    book = Book("Title with $#@!", "Author with &*^%", "ISBN-123!@#")
    print(book)

elif test_case == "multiple_books":
    library = Library("Public Library")
    
    books = [
        Book("Book 1", "Author 1", "111111"),
        Book("Book 2", "Author 2", "222222"),
        Book("Book 3", "Author 3", "333333"),
        Book("Book 4", "Author 4", "444444"),
        Book("Book 5", "Author 5", "555555")
    ]
    
    for book in books:
        library.add_book(book)
    
    print(library)
    for i, book in enumerate(library.books):
        print(f"Book {i+1}: {book}")

elif test_case == "borrower_assignment":
    book = Book("The Hobbit", "J.R.R. Tolkien", "987654")
    print(f"Initial borrower: {book.borrower}")
    
    book.borrower = "John Doe"
    book.available = False
    print(f"New borrower: {book.borrower}")
    print(book)

elif test_case == "attribute_access":
    book = Book("Pride and Prejudice", "Jane Austen", "246810")
    print(f"Title: {book.title}")
    print(f"Author: {book.author}")
    print(f"ISBN: {book.isbn}")
    print(f"Available: {book.available}")
    print(f"Borrower: {book.borrower}")
    
    # 属性を変更
    book.title = "Updated Title"
    book.author = "Updated Author"
    book.isbn = "999999"
    book.available = False
    book.borrower = "Jane Smith"
    
    print("\
After modifications:")
    print(f"Title: {book.title}")
    print(f"Author: {book.author}")
    print(f"ISBN: {book.isbn}")
    print(f"Available: {book.available}")
    print(f"Borrower: {book.borrower}")

Object Oriented Programmingのすべてのレッスン