代码之家  ›  专栏  ›  技术社区  ›  DecafOyster208

python双链表类

  •  0
  • DecafOyster208  · 技术社区  · 8 年前

    所以我有两个类-一个是图书库,实现为双链表,另一个是图书节点的DLL节点类,如下所示:

    class Book:
    def __init__(self,name,author,dateadded,viewed = False, nextnode=None, prevnode=None):
        self._name = name
        self._author = author
        self._dateadded = dateadded
        self._viewed = viewed
        self._next = nextnode
        self._prev = prevnode
    
    def __str__(self):
        """ Return string representation of book """
        outstr = ""
        outstr += self._name + " /n"
        outstr += self._author + "/n"
        outstr += self._dateadded
        return outstr
    
    def read(self):
        """ Simulates the book being read & return string representation of the book """
        self._viewed = True
        outstr = "CURRENTLY READING: "
        outstr += self._name
        return outstr
    

    我的book library类处理一系列book节点,如下所示:

    class BookLibrary:
    
    """ A Doubly Linked List implementing a book library """
    
    def __init__(self):
        self.size = 0
        self.head = None
        self.tail = None
    

    我的问题在我的 add_book() 方法-当我运行它时,我得到的错误是 TypeError: add_book() takes 1 positional argument but 5 were given

    def add_book(book):
        """ Add a book to the library in decreasing order of dateadded """
        n = Book(book)
        if self.size == 0:
            self.head = n
            self.tail = n
            current_book = n
            self.size += 1
    
        elif self.head._dateadded <= n._dateadded:
            n._next = self.head
            self.head._prev = n
            n._prev = None
            self.head = n
            self.size += 1
    
        elif self.tail._dateadded <= n._dateadded:
            self.tail._prev._next = n
            n._prev = self.tail._prev
            n._next = self.tail
            self.tail._prev = n
            self.size += 1
    
        elif self.size != 0:
            iterator = self.head._next
            while iterator._next is not None:
                if n._dateadded >= iterator._dateadded:
                    n._prev = iterator._prev
                    iterator._prev._next = n
                    n._next = iterator
                    iterator._prev = n
                    self.size += 1
                    break
                else:
                    iterator = iterator._next
        return None
    

    我非常感谢你的帮助谢谢

    这是我运行的代码:

    book_lib = BookLibrary()
    book_lib.add_book("Harry Potter", "JK ROWLING", 19990101, False)
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   0TTT0    8 年前

    如果您将所有参数传递给 add_book() 你会去 class Book ,这是你的问题。它只需要一个参数, book 课堂用书 期望。

    最好先实例化book对象,然后将其直接传递到 add_book 方法