【发布时间】:2021-08-23 15:27:41
【问题描述】:
在这个类中,多项式接受一个像这样的元组列表 >> [(1,2),(3,1),(2,3),(2,2)]
我需要为这个特定部分做的是获取一个元组列表,然后插入函数和 init 函数应该能够通过创建节点基于指数以升序组织数据在 Node 类中。
现在我的代码正在返回:
>>> p = Poly([(1,0),(2,2),(1,1),(3,4)])
>>> print(p)
3x^4Traceback (most recent call last):
Python Shell, prompt 5, line 1
builtins.TypeError: __str__ returned non-string (type NoneType)
它是一个链接列表,我不允许事先组织列表或将其转换为字典或任何其他形式。它应该由 insert 和 init 函数组织。
class Poly:
class Node:
def __init__(self, coef, power, _next):
self._coef = coef #coefficient from tuple first number
self._power = power # exponent from tuple second number
self._next = None
def __repr__(self):
pass
def __init__(self, lst):
self._head = None
for i in lst:
coefficient = i[0]
exponent = i[1]
self._head = self.Node(coefficient, expo, self._head)
def __str__(self):
tmp = self._head
while tmp != None :
print(f'{tmp._coef}x^{tmp._power}')
tmp = tmp._next
def insert(self, tup):
pass
我尝试在 Poly init 函数中创建一个 while 循环并分离两个元组编号,但我不确定从哪里开始 Node 类并且非常困惑,感谢任何帮助并谢谢提前。
输出应该是这样的:
>>> p0 = Poly([(3,2), (1,0)])
>>> print(p0)
>>> 1 + 3x^2
>>> p1 = Poly([(0,3),(4,5),(2,3),(3,4)])
>>> print(p1)
>>> 2x^3 + 3x^4 + 4x^5
【问题讨论】:
-
节点类很好,虽然如果你不使用它,你不需要
_next作为参数。insert函数只需要从头开始并按数字顺序将新节点插入到适当的位置。所以如果_next不为空,且_power大于新幂,则在此处插入新记录。 -
明白了,但是随着数据作为一个包含元组的列表传入,我将如何首先创建节点,这就是我想知道的?就像我如何告诉python第一个数字是一个系数,而元组中的第二个数字是一个幂然后交叉检查这些幂是否更大?我尝试了一个while循环,但我无法让它在没有索引错误的情况下进行迭代和比较@TimRoberts
标签: python python-3.x list function linked-list