0

クラスの作成に関係する短い課題を完了する必要がありますが、コードの問題が何であるかわかりません。これが以下の手順であり、その下に私のコードがあります。エラーの内容とその修正方法を説明してください:

2 クラスを作成します。最初のクラスは「ブック」クラスになります。book クラスには、すべてプライベートな 4 つの変数があります。1 つ目は、false に初期化されたブール値である checkedOut、入力変数によって初期化される文字列である title、入力変数によって初期化される文字列である author、整数であり、またによって初期化される pages です。入力変数。このクラスには、is に関連付けられた 4 つの関数もあります。1 つ目は、変数 checkedOut を返します。2 番目は、checkedOut の値を変更します。値が true に設定されている場合は false に変更され、その逆も同様です。3 番目の関数はページ数を返し、最後の関数はタイトルを返します。book オブジェクトが印刷されるとき、それは「title author pages checkedOut」の形式になります。

2 番目のクラスはライブラリと呼ばれます。ライブラリが初期化されると、コレクションと呼ばれる空の辞書が作成されます。ライブラリ クラスには 2 つの関数があります。最初の関数は addBook と呼ばれ、タイトル、作成者、ページの 3 つの入力変数を受け取ります。この関数では、ブック オブジェクトを作成し、タイトルをキーとして辞書に追加します。2 番目の関数は、書籍のタイトルを取得し、辞書で書籍を検索して、checkedOut ステータスを変更する books 関数を呼び出します。最後に、ライブラリ オブジェクトが印刷されると、ライブラリ内の各本が別々の行に印刷されます。

最後に、ライブラリ クラスが main.py という python プログラムに実装されます。

これが私のコードです:

class Book:

    title = str(input("Enter the title of the book. "))
    author = str(input("Enter the author of the book. "))
    pages = int(input("Enter the number of pages in the book. "))
    checkedOut = False

    def checked_Out(self):
        print(checkedOut)
        return checkedOut

    def change_value_of_checkedOut(self):
        if checkedOut == False:
            checkedOut = True
            print("Switched from False to True.")
        elif checkedOut == True:
            checkedOut = False
            print("Switched from True to False.")

    def return_pages(self):
        print(pages)
        return pages

    def return_title(self):
        print(title)
        return title



class Library(Book):
    def __init__(self):
        collection = {}

    def addBook(self, title, author, pages):
        new_book = Book()
        collection[title] = author

    def change_checked_out_status(self, title):
        if title in collection:
            new_book.change_value_of_checkedOut(self)
        else:
            print("This book is not in the collection.")

ここで私がしたことの何が問題になっていますか? オブジェクトを作成して IDLE でコードを実行しようとすると、特定の変数名が定義されていないというエラーが発生し続けます。

4

2 に答える 2

3

(0) 次回、エラーを貼り付けます。

class Book:

    title = str(input("Enter the title of the book. "))
    author = str(input("Enter the author of the book. "))
    pages = int(input("Enter the number of pages in the book. "))
    checkedOut = False

    def checked_Out(self):
        print(checkedOut)
        return checkedOut

(1) この部分だけ。

checkedOut定義されていません。checkedOut はどこに表示されますか? 関数のすぐ上checked_Out。わかった。短い答え、追加しself.ます。

例:

    def checked_Out(self):
        print(self.checkedOut)
        return self.checkedOut

そして、あなたは本当にタイトルをやるべきではありません。インスタンス変数ではなく、クラス変数になります。違いがあります。

(2)inputまだ 2.x Python を使用している場合は避けてください。

を使用raw_inputして削除しstrます。その方が安全です。3.x では入力を使用でき、常に文字列になります (raw_input は常に文字列を返します)。それも問題を引き起こしています。

(3) あなたはすべてを大文字にする粘り強さを持っています。私は通常かなり寒いですが、それはちょっと悪いです。checked_Out本当に矛盾しているとは呼ばないでください。さらに、Python プログラマーが好むchecked_out. checkedOutに名前をchecked_out付けることができ、ねえ、競合することができます。関数と変数にあまり似た名前を付けないでください。

于 2013-04-24T01:31:40.617 に答える
0

クラスを個別に作成し、入力を個別に取得します。また、各変数はインスタンス変数であり、ローカル スコープには含まれないことに注意してください。

class Book:
    def __init__(self, title, author, pages):
        self.title = title
        self.author = author
        self.pages = pages
        self.checkedOut = False

    def checked_Out(self):
        print(self.checkedOut) # it has to be the instance variable
        return self.checkedOut

    def change_value_of_checkedOut(self):
        if self.checkedOut == False:
            self.checkedOut = True
            print("Switched from False to True.")
        elif self.checkedOut == True:
            self.checkedOut = False
            print("Switched from True to False.")

    def return_pages(self):
        print(self.pages)
        return self.pages

    def return_title(self):
        print(self.title)
        return self.title

class Library:
    def __init__(self):
        collection = {}

    def addExistingBook(self, book):
        collection[book.title] = book.author

    def addNewBook(self, title, author, pages): # create a book
        new_book = Book(title, author, pages)
        collection[title] = new_book.author # access the author

    def change_checked_out_status(self, title):
        if title in collection.keys():
            title.change_value_of_checkedOut()
        else:
            print("This book is not in the collection.")

次に、残りをmain関数に追加します。

def main():
    # if you are using Python 2.x, change input() to raw_input()
    title = str(input("Enter the title of the book. "))
    author = str(input("Enter the author of the book. "))
    pages = int(input("Enter the number of pages in the book. "))
    myBook = Book(title, author, pages)
    myLib = Library()
    myLib.addExistingBook(myBook)
于 2013-04-24T02:03:46.337 に答える