【问题标题】:Python Stack without using Pop function不使用 Pop 函数的 Python Stack
【发布时间】:2017-01-20 14:20:46
【问题描述】:

我正在学习 Python,并且有一项任务是为了更好地理解“类”和使用“堆栈”。

要求如下:

-定义一个实现数值堆栈的类。

-不能使用内置弹出功能

-函数推送应该检查值是否为数字

-函数 print_stack 应该打印堆栈中的值,最近的(在顶部)在前

-如果堆栈为空,函数 IsEmpty 应返回 True,否则返回 false

这是我目前的工作:

class stack():
    def __init__(self):
        self.items = []

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

    def isEmpty(self):
        return (self.items == [])  #can also use return not self i think?

    def print_stack(self):
        print self.items  

这是我的第一堂编程课,如果我的理解不佳,我很抱歉。我不是在寻找任何人直接为我写这篇文章。我真的很想了解如何去做,并收到一些关于我需要做什么以及我缺乏理解的指示(如果很明显的话)。

我的问题如下:

1) 我如何测试我是否在推送一个数值?乍一看,我可以使用 try/except 吗?

2) 在不使用内置函数的情况下创建 pop 函数的最佳方法是什么?这真的让我很难受。据我了解,我需要编写一些东西来检索列表中的最后一项并将其返回。

3) 为了测试我的代码,我会做这样的事情吗?

test = stack()
test.push(1)
test.print_stack()
test.pop()  #whenever I learn how to make a pop function
test.isEmpty

【问题讨论】:

    标签: python-2.7 stack


    【解决方案1】:

    我如何测试我是否在推送一个数值?乍一看,我可以使用 try/except 吗?

    你不需要测试它。只需将其转换为 int 或您当时正在处理的任何数据类型。例如 如果您正在使用int

    def push(self, item):
        self.items.append(int(item))
    

    如果您正在使用float

    def push(self, item):
        self.items.append(float(item))
    

    如果您正在使用string

    def push(self, item):
        self.items.append(str(item))
    


    在不使用内置函数的情况下创建 pop 函数的最佳方法是什么?这真的让我很难受。据我了解,我需要编写一些东西来从列表中检索最后一项并将其返回。

    有多种方法,

    1. 使用del

      def pop(self):
          n = self.items[0]
          del self.items[0]
          return n
      
    2. 使用切片

      def pop(self):
          n = self.items[0]
          self.items = self.items[1:]
          return n
      

      请注意,这将返回原始文件的一个子集,但不会对其进行修改。

    3. 使用popleft()

      def pop(self):
          return self.items.popleft()
      

    一个建议 您也可以使用len() 来检查列表的长度,并使用它来检查堆栈是否为空,

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

    注意:在弹出之前使用您的isEmpty() 函数检查堆栈是否为空。


    为了测试我的代码,我会做这样的事情吗?

    尝试执行每个函数,如果您认为有问题,则在每次操作后打印堆栈。您将看到堆栈中的值是如何准确更新的。

    【讨论】:

    • 出于某种原因,我忘记投票并接受这一点。对不起@Ani
    • 很高兴能回答你的问题:)
    猜你喜欢
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 2021-11-17
    • 2011-03-16
    • 2018-09-01
    • 2015-11-12
    • 2013-12-31
    相关资源
    最近更新 更多