【问题标题】:Python: Attribute error Nonetype object has no attribute 'nxt'Python:属性错误Nonetype对象没有属性'nxt'
【发布时间】:2019-03-12 00:29:18
【问题描述】:

我无法对这个单链表进行排序。目标是按指数降序对多项式进行排序。但是我不断收到属性错误:Nonetype 没有属性“nxt”,我不明白为什么。下面是我的代码

NodeModule.py

!/usr/bin/python

导入系统

sys.setrecursionlimit(4500)

"""一个包含Node类的模型"""

类节点(对象): """数据结构中的单个节点"""

    def __init__(self, _coefficient, _exponent):
            self._coefficient=_coefficient
            self._exponent=_exponent
            self.nxt=None

    @property
    def coefficient(self):
            return self._coefficient

    @coefficient.setter
    def coefficient(self, c):
            self._coefficient=c

    @coefficient.deleter
    def coefficient(self):
            del self.coefficient

    @property
    def exponent(self):
            return self._exponent

    @exponent.setter
    def exponent(self, e):
            self._exponent=e

    @exponent.deleter
    def exponent(self):
            del self._exponent

    @property
    def nxt(self):
            return self._next

    @nxt.setter
    def nxt(self, n):
            self._next=n

    @nxt.deleter
    def nxt(self):
            del self._next

    def __eq__(self, other):
            if self._exponent==other._exponent:
                    return True
            else:
                    return False

    def __It__(self, other):
            if self._exponent<other._exponent:
                    return True
            else:
                    return False

    def __str(self):
            if self._coefficient>=0:
                    sign="+"
            else:
                    sign=""
            return sign +str(self._coefficient) + "X^" +str(self._exponent)

ListModule.py

!/usr/bin/python

从 NodeModule 导入节点

类列表(节点): """带有预定义节点类的链表"""

    def __init__(self):
            self.head=None
            self.count=0


    def isEmpty(self):
            return self.count==0

    def getSize(self):
            return self.count

    def setNode(self, a=5, b=2):
            n=Node(a, b)
            return n

    def insert(self, index, n):
            if index<0 or index > self.count:
                    return False

            if index==0:
                    n.next=self.head
                    self.head=n
                    self.count+=1
                    return True

            walker=self.head
            for i in range(index-1):
                    walker=walker.nxt
            n.nxt=walker.nxt
            walker.next=n
            self.count+=1
            return True

    def delete(self, index):
            if index < 0 or  index > self.count:
                    return False
            if index==0:
                    self.head=self.head.nxt
                    self.count-=1
                    return True

            walker=self.head
            for i in range(index-1):
                    walker=walker.nxt

            walker.nxt=walker.nxt.nxt
            self.count-=1
            return True
    def sort(self):
            temp1=self.head.exponent
            walker=self.head
            j=0
            while j < self.count:
                    for i in range(self.count):
                            walker=walker.nxt
                            if i==0:
                                    if walker.nxt.exponent > temp1:
                                            self.insert(0, walker.nxt)
                                            self.delete(walker.nxt)
                                            return True
                            while walker.nxt is not None and walker.nxt.nxt is not None:
                                    if walker.nxt.exponent < walker.nxt.nxt.exponent:
                                            self.insert(self.getsize(), walker.nxt.nxt)
                                            self.delete(walker.nxt)
                                            return True
                                    return False
                    j+=1

    def str(self):
            if self.isEmpty():
                    return "\nEnd of Polynomial"

            walker=self.head
            output=[]

            while walker is not None:
                    output.append(str(walker))
                    walker=walker._next
            return " + " .join(output)

main.py

!/usr/bin/python

从 NodeModule 导入节点 从 ListModule 导入列表

def readPoly(message):

    l=List()

    n=input(message)
    for i in range(n):
            c=input("Enter the coefficient of term %d " % i)
            e=input("Enter the exponent of term %d " % i)
            l.insert(0, Node(c,e))
    return l

def main():

    l=readPoly("Enter the number of terms of the polynomial: ")
    print l

    l.sort()
    print l

    l.delete(0)
    print (l)

如果 name=='ma​​in': 主要()

【问题讨论】:

  • 我看到的只是一些从未使用过的类定义。您需要向我们展示您是如何使用这些课程的。
  • @JohnGordon 我已经编辑过了

标签: python runtime-error attributeerror


【解决方案1】:

它出现在第二个代码块中 self.head=Nonewalker=self.headwalker=walker.nxt。这意味着通过推断,您正在尝试获取None.nxt 属性(NoneType),您在开始时将其设置为self.head

【讨论】:

  • 我明白了。因此,为了在我的排序功能中纠正这个问题,我是否必须将 self.head 设置为初始节点?
  • 在您尝试获取.nxtwalker 时,您需要将walker 设为Node。使用self 可能是个问题,因为self.head 可能无法设置为Node
猜你喜欢
  • 2018-05-02
  • 1970-01-01
  • 2017-09-14
  • 2021-02-17
  • 2023-02-17
  • 2014-06-04
  • 1970-01-01
  • 2019-03-17
  • 2022-11-29
相关资源
最近更新 更多