【问题标题】:create stack using 2 queues使用 2 个队列创建堆栈
【发布时间】:2018-08-05 13:51:00
【问题描述】:

大家好,我在数据结构课上的第一次作业遇到了麻烦,希望有人能提供一些关于我做错了什么的见解。

我必须创建一个使用 2 个队列进行数据存储的堆栈。

import Queue_PlistLR as queueList

import Queue_PlistLR as queueList

class Stack_2Queues():

        def __init__(self, name, salary):
                self.items = []
                self.name = name
                self.salary = salary

        def isEmpty(self):
                return len(self.items) == 0        

        def push(self, e):
                self._data.append(e)

        def pop(self):
                if self.is_empty:
                        raiseEmpty("Stack is empty")
                return self._data.pop()
        def size(self):
                return len(self.items) 

        def to_String(self):
                str_i = ""
                for e in self.items:
                        str_i+=str(e)+" "
                return str_i.strip() 

        def length(self):

                return len()

        def enqueue(self, item):
                self.items.append(item)

        def dequeue(self):
                if self.isEmpty():
                        raise Empty('Queue is empty')
                return self.items.pop(0)        

        def employeeName(self):
                print("The employee is: ", self.name)

        def employeeSalary(self):

                print("Employees salary is", self.salary)        

s1 = Stack_2Queues = [["Ash", "Jen", "Mike", "Zach"], [45000, 32000, 74000, 960000]]

s1.employeeName()
s1.employeeSalary()

***我知道这在很大程度上是错误的。但我的问题是这个。对于堆栈,我想使用 1 个堆栈创建 2 个队列,一个用于employeeName,另一个用于employeeSalary。

此外,当我尝试从堆栈中打印姓名和薪水(以查看它是否有效)时,我得到“列表没有属性”错误。***

所以,这是我的问题:

1) 请原谅我的文盲,因为这听起来很愚蠢,但是我的 s1 变量是堆栈的形式吗?

2) 我定义了所有方法并调用了它们,为什么我得到的列表没有属性?

【问题讨论】:

标签: python stack queue


【解决方案1】:

AttributeError 是由这一行引起的:

s1 = Stack_2Queues = [["Ash", "Jen", "Mike", "Zach"], [45000, 32000, 74000, 960000]]

这不是您初始化Stack_2Queues 的方式。这里实际发生的是,您将包含另外两个列表的列表分配给变量s1Stack_2Queues(从而将指向类定义的引用更改为列表)

In [1]: s1 = Stack_2Queues = [["Ash", "Jen", "Mike", "Zach"], [45000, 32000, 74000, 960000]]

In [2]: print(s1)
[['Ash', 'Jen', 'Mike', 'Zach'], [45000, 32000, 74000, 960000]]

In [3]: print(Stack_2Queues)
[['Ash', 'Jen', 'Mike', 'Zach'], [45000, 32000, 74000, 960000]]

简单的例子来理解这一点:

In [4]: a = 5

In [5]: b = 5

这相当于:

In [6]: a = b = 5

将行改为:

s1 = Stack_2Queues(["Ash", "Jen", "Mike", "Zach"], [45000, 32000, 74000, 960000])

之后它对我有用:

('The employee is: ', ['Ash', 'Jen', 'Mike', 'Zach'])
('Employees salary is', [45000, 32000, 74000, 960000])

另外,您在脚本顶部两次导入了相同的模块,但您没有使用过。

如果您尝试在Stack_2Queues 的实例上调用pushpop,python 将抛出另一个AttributeError,因为Stack_2Queues 没有任何_data 属性。

def push(self, e):
    self._data.append(e)

def pop(self):
    if self.is_empty:
        raiseEmpty("Stack is empty")
    return self._data.pop()

您或许应该更改这部分代码或在__init__ 方法中添加self._data

这也行不通:

def length(self):
    return len()

在没有任何参数的情况下调用内置的len 函数将引发错误。 https://docs.python.org/3.6/library/functions.html#len 这可能是多余的,因为您定义了 size 方法并且可能做同样的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 2010-11-20
    • 2011-11-29
    • 2010-10-15
    • 1970-01-01
    相关资源
    最近更新 更多