【问题标题】:python doubly linked list classpython双向链表类
【发布时间】:2018-04-02 04:37:09
【问题描述】:

所以我有两个类——一个是实现为双向链表的图书库,另一个类是图书节点的 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

我的图书库类处理一系列图书节点,如下所示:

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)

【问题讨论】:

    标签: python class nodes doubly-linked-list


    【解决方案1】:

    如果您将所有参数传递给add_book(),而您将传递给class Book,这就是您的问题。它只需要一个参数book,但我假设您正在传递class Book 期望的所有参数。

    您最好先实例化您的 book 对象,然后将它们直接传递给您的 add_book 方法。

    【讨论】:

    • 我明白你在说什么,但没有在 add_book() 方法中实例化该行中的 book 对象:n = Book(book) 已经
    • 不,您需要在主代码中实例化它,理想情况下您会创建一本书,然后将其添加到图书馆。但如果你想动态添加它,你可以做book_lib.add_book(Book("Harry Potter", "JK ROWLING", 19990101, False))
    • 另外,如果你想让你的代码运行,你必须将self 作为第一个参数添加到add_book def add_book(self, book):
    • 而您需要做的最后一件事是将add_book 函数中的所有ns 更改为book
    猜你喜欢
    • 2015-03-24
    • 2013-11-17
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    相关资源
    最近更新 更多