我需要帮助来理解这个任务:
修改 ArrayStack 实现,以便将堆栈的容量限制为 maxlen 元素,其中 maxlen 是构造函数的可选参数(默认为 None(。如果在堆栈满负荷时调用 push,请引发 Full 异常(定义类似于 Empty(。
这就是我正在摆弄的
from exceptions import Empty
from exceptions import Full
class ArrayStack:
def __init__(self):
self._data = [] # nonpublic list instance
def __len__(self):
return len(self._data)
def is_empty(self):
return len(self._data) == 0
def is_full(self):
return len(self.data) == n-1
def push(self, e):
self._data.append(e) # new item stored at end of list
if self.is_full():
raise Full('Stack is full')
return self._data[n-1]
def top(self):
if self.is_empty():
raise Empty('Stack is empty')
return self._data[-1]
def pop(self):
if self.is_empty():
raise Empty('Stack is empty')
return self._data.pop()
我希望您知道代码中的前两个语句会引发错误。您需要声明您的异常,为此我建议您查看在现代 Python 中声明自定义异常的正确方法?。
您将在__init__
中设置maxlen
:
def __init__(self, maxlen=None):
self.maxlen=maxlen
现在,is_full
需要修改以根据self.maxlen
是None
还是数字来采取不同的行动。如果None
那么堆栈永远不会填满(至少在理论上(。