python 双向链表 class
python doubly linked list class
所以我有两个 classes - 一个是作为双向链表实现的图书库,另一个 class 是图书节点的 DLL 节点 class这是:
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 处理一系列图书节点,如下所示:
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)
如果您将要传递给 class Book
的所有参数都传递给 add_book()
,这就是您的问题。它只需要一个参数 book
,但我假设您传递的是 class Book
需要的所有参数。
您最好先实例化您的书籍对象,然后将它们直接传递给您的 add_book
方法。
所以我有两个 classes - 一个是作为双向链表实现的图书库,另一个 class 是图书节点的 DLL 节点 class这是:
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 处理一系列图书节点,如下所示:
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)
如果您将要传递给 class Book
的所有参数都传递给 add_book()
,这就是您的问题。它只需要一个参数 book
,但我假设您传递的是 class Book
需要的所有参数。
您最好先实例化您的书籍对象,然后将它们直接传递给您的 add_book
方法。