【问题标题】:Why is my stacksize function returning NONE为什么我的 stacksize 函数返回 NONE
【发布时间】:2019-03-03 04:08:19
【问题描述】:
class stack:
  def __init__(self)

  def stacksize(self):
       Size=len(self.stack)
       Print ('size is', size)

返回 大小为 4 #假设列表大小为 4 无

以及如何访问该堆栈中最顶部的元素

【问题讨论】:

  • 您尚未将任何对象分配给堆栈。该函数返回 None 因为您没有从该函数返回任何内容

标签: python python-2.7 stack


【解决方案1】:

我不确定您发布的代码是否完整,但您的 init 功能不完整。使用“pass”来声明没有任何实际代码的函数。其次,stacksize 返回 None 因为你实际上并没有返回任何东西。

class stack:
  def __init__(self):
      pass # Add this line of code

  def stacksize(self):
       Size=len(self.stack)
       Print ('size is', size)
       return size # Add this line of code to return the value.

【讨论】:

    【解决方案2】:

    让我们详细了解您的代码。

    我注意到的第一件事是您需要将 pass 关键字添加到 python 中的任何空块。此外,您忘记通过不使用颜色来打开您的块。所以,如果我按原样运行代码,我会得到:

    File "main.py", line 2    def __init__(self)
                                               ^
    SyntaxError: invalid syntax
    

    转到第二种方法,在打印方法 (P) 的第一个字母中,您注意到它是大写的。在编程中,命名约定很重要,所以 print() 应该全部小写。我们来看看第二种方法中标注的错误:

    如上所述,正确print()。继续下一件事,Size 带有绿色下划线。我建议你为你的代码获取一个 linting 程序,在这种情况下,按照约定,变量应该以小写字母开头。如果我们修复这两个问题,您的代码状态是这样的:

    好的,很好,现在情况正在好转。但是,为什么 self 有红色下划线? self 将调用此类的此方法的当前实例上下文化的原因。问题是堆栈属性尚未声明,为此,请将您的代码更改为:

    class stack:
      def __init__(self):
          self.stack = []
    
      def stacksize(self):
           size = len(self.stack)
           print('size is', size)
    

    请注意,我删除了 pass,并为堆栈成员变量分配了一个空列表。当然,您将决定 stack 成员变量将是,在这种情况下,我只是将其添加为列表。

    好的,现在,最后一个问题是,为什么 size 是 None?随着我添加的代码更改,它现在应该返回 零 (0),因为堆栈列表是空的,但有一个列表。

    按照惯例,类以大写字母开头。

    最后,如何访问栈顶元素?像这样:

    这段代码的上下文当然是在类上下文之外,注意它没有self.,但是你的self.stack应该是一样的。

    我希望这对朋友有帮助! :)

    【讨论】:

    • 非常感谢,我已经调试了所有的代码,它成功了
    • 没问题! :)。
    猜你喜欢
    • 2021-11-13
    相关资源
    最近更新 更多