在对象内创建列表(书籍/读者等待列表)

0 投票
1 回答
1306 浏览
提问于 2025-04-18 06:37

我有一个作业,要创建一个“图书馆”,里面有一个借书人类和一本书类。这个图书馆应该允许人们借最多3本书,如果书已经被借走了,还要把这本书加到借书人的等待名单上。当书被归还时,应该自动借给等待名单上的第一个人。我好像没法让这个等待名单正常工作。以下是我的代码:

class Patron(object):
def __init__(self,name,booksOut=0):
    self._name=name
    self._booksOut=booksOut

def getBooksOut(self):
    return self._booksOut

def __str__(self):
    result="Name: "+self._name+"\n"
    result+="Books Out: "+str(self._booksOut)+"\n"
    return result


class Book(object):
def __init__(self,title,author,owner=None):
    self._title=title
    self._author=author
    self._owner=owner
    self._queue=[] #Here is the empty list I'm using... but it doesn't seem to be working.

def setOwner(self,owner):
    self._owner=owner

def getOwner(self):
    return self._owner

def borrowMe(self, patron):
    if self._owner != None:
        return "This book is not available. You've been added to the queue.\n"
        self._queue.append(patron)
        print(str(self._queue)) #I can't even get the list to print, so I'm feeling like I didn't create it correctly
    else:
        if patron.getBooksOut()>=3:
            return "You have too many books checked out!"
        else:
            self.setOwner(patron)
            patron._booksOut+=1
            return "You have successfully checked this book out."

def returnMe(self):
    if len(self._queue)==0:
        self.setOwner(None)
        return "Your book has been returned."
    else:
        return "Your book has been given to: "+str(self._queue[0])
        self.borrowMe(self._queue[0]) #Here is where I'm trying to automatically borrow the book to the first person in the waitlist

def __str__(self):
    result="Title: "+self._title+"\n"
    result+="Author: "+self._author+"\n"
    if self._owner != None:
        result+="Owner: "+str(self.getOwner())
    else:
        result+="Owner: None"
    return result


def main():
"""Tests the Patron and Book classes."""
p1 = Patron("Ken")
p2 = Patron("Martin")
b1 = Book("Atonement", "McEwan")
b2 = Book("The March", "Doctorow")
b3 = Book("Beach Music", "Conroy")
b4 = Book("Thirteen Moons", "Frazier")
print(b1.borrowMe(p1))
print(b2.borrowMe(p1))
print(b3.borrowMe(p1))
print(b1.borrowMe(p2))
print(b4.borrowMe(p1))
print(p1)
print(b1)
print(b4)
print(b1.returnMe())
print(b2.returnMe())
print(b1)
print(b2)

我在代码里用#注释标记了创建等待名单的部分(在书类的init里),还有我尝试打印这个名单以检查错误的地方(在borrowMe方法里),以及我试图自动把书借给等待名单上第一个人的地方(在returnMe方法里)。

任何建议都很感谢。

1 个回答

1
if self._owner != None:
        return "This book is not available. You've been added to the queue.\n"
        self._queue.append(patron)
        print(str(self._queue))

你在 return 之后打印东西。其实在 return 之后的代码是不会被执行的。你应该把它改成 print。另外,在 Patron 类里,把 __str__ 改成 __repr__。否则它会打印出一堆内存地址。还有,print(str(self._queue)) 这个也是多余的,你可以直接打印列表。

撰写回答