【问题标题】:Python Enqueue and Dequeue Emulation Using a Subclass使用子类的 Python 入队和出队仿真
【发布时间】:2017-09-20 03:28:57
【问题描述】:

作为一个相对较新的 Python 程序员,我最近尝试通过使用类和子类来模拟入队和出队。目前,我的代码读取和执行尝试读取:

class queue:
    class node:
        def __init__(self, value, nextNode):
            self.value = value
            self.nextNode = nextNode

    def __init__(self):
        self.top = None
        self.last = None
        self.size = 0

    def __len__(self):
        return self.size

    def enqueue(self, value):
        #This creates an extra node with "value" and inserts at the top
        newNode=queue.node(value,None)
        if self.size ==0:
            self.top=newNode
            self.last=self.top
            self.size+=1
        else:
            self.last.nextNode=newNode
            self.last=newNode
            self.size+=1      

    def dequeue(self):
        #This returns self.top.value and at the same time deletes the top 
         node.
        if self.size ==0:
            return "error: dequeue from an empty queue"
        elif self.size == 1:
            val=self.top.value
            nxt=self.top.nextNode
            self.top=None
            self.last=None
        else:
            val=self.top.value
            nxt=self.top.nextNode
            self.top=nxt
        return val

q = queue()
q.enqueue(1)
q.enqueue(2)
q.enqueue(3)
q.enqueue(4)
x=q.dequeue()
output = []
while len(q)>0:
    x = q.dequeue()
    output.append(x)
print(output)
#This should show [2, 3, 4]

据我了解,我的主要问题是返回当前收到的值:

AttributeError: 'NoneType' 对象没有属性 'value'

当我尝试跑步时。如果有人能澄清问题所在,将不胜感激。

【问题讨论】:

    标签: python python-3.x class queue subclass


    【解决方案1】:

    当你出队时你需要减少 self.size。通过 pdb 运行程序总是 4。

    def dequeue(self):
        if self.size ==0:
            return "error: dequeue from an empty queue"
        elif self.size == 1:
            val=self.top.value
            nxt=self.top.nextNode
            self.top=None
            self.last=None
            self.size -= 1
        else:
            val=self.top.value
            next=self.top.nextNode
            self.top=next
            self.size
            self.size -= 1
        return val
    

    【讨论】:

    • 哇,真不敢相信我错过了。我在 dequeue 语句中添加了一个 self.size-=1 ,果然它就像一个魅力!感谢您指出这一点!
    • 迈克尔完全没问题。不过,其他一切都做得很好。我只写了两行,这对我来说就像一个魅力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 2018-02-25
    • 1970-01-01
    • 2013-05-02
    相关资源
    最近更新 更多