スタックオーバーフローこんにちは!
ライブラリに含まれるすべての書籍のレポートをコンパイルするプログラムで単純なコマンドを実行しています。ライブラリには棚のリストが含まれており、各棚には書籍の辞書が含まれています。しかし、私の最善の努力にもかかわらず、私は常にすべての本を複製し、プログラムに本を置くように指示した棚ではなく、すべての棚に置いています。
オブジェクトの作成と編成に関するある種の基本的なルールを見逃していると思います。
犯人は book クラスの enshelf メソッドと unshelf メソッドだと思います。
時間をありがとう、ジェイク
以下のコード:
class book():
shelf_number = None
def __init__(self, title, author):
super(book, self).__init__()
self.title = title
self.author = author
def enshelf(self, shelf_number):
self.shelf_number = shelf_number
SPL.shelves[self.shelf_number].books[hash(self)] = self
def unshelf(self):
del SPL.shelves[self.shelf_number].books[hash(self)]
return self
def get_title(self):
return self.title
def get_author(self):
return self.author
class shelf():
books = {}
def __init__(self):
super(shelf, self).__init__()
def get_books(self):
temp_list = []
for k in self.books.keys():
temp_list.append(self.books[k].get_title())
return temp_list
class library():
shelves = []
def __init__(self, name):
super(library, self).__init__()
self.name = name
def make_shelf(self):
temp = shelf()
self.shelves.append(temp)
def remove_shelf(shelf_number):
del shelves[shelf_number]
def report_all_books(self):
temp_list = []
for x in range(0,len(self.shelves)):
temp_list.append(self.shelves[x].get_books())
print(temp_list)
#---------------------------------------------------------------------------------------
#----------------------SEATTLE PUBLIC LIBARARY -----------------------------------------
#---------------------------------------------------------------------------------------
SPL = library("Seattle Public Library")
for x in range(0,3):
SPL.make_shelf()
b1 = book("matterhorn","karl marlantes")
b2 = book("my life","bill clinton")
b3 = book("decision points","george bush")
b1.enshelf(0)
b2.enshelf(1)
b3.enshelf(2)
print(SPL.report_all_books())
b1.unshelf()
b2.unshelf()
b3.unshelf()
出力:
[['決定点', '私の人生', 'マッターホルン'], ['決定点', '私の人生', 'マッターホルン'], ['決定点', '私の人生', 'マッターホルン']] なし【0.1秒で終了】
.. [["決定点"]、["私の人生"]、["マッターホルン"]] の代わりに