pycharm的问题

studentlsc 2016-04-02 09:41:16
# _*_ coding:utf-8 _*_
# file:pystack.py
#


class PyStack: # 堆栈类
def __init__(self, size=20):
self.stack = [] # 堆栈列表
self.size = size # 堆栈大小
self.top = -1 # 栈顶位置

def set_size(self, size): # 设置堆栈大小
self.size = size

def push(self, element): # 元素进栈
if self.is_full(): # 如果栈满则引发异常
raise StackException('PyStackOverflow')
else:
self.stack.append(element)
self.top += 1

def pop(self): # 元素出栈
if self.is_full():
element = self.stack[- 1]
self.top -= 1
del self.stack[- 1]
return element
else:
raise StackException('PyStackOverflow')

def a_top(self): # 获取栈顶的位置
return self.top

def empty(self): # 清空栈
self.stack = []

def is_empty(self): # 是否为空栈
if self.stack == -1:
return True
else:
return False

def is_full(self): # 是否为满栈
if self.top == self.size-1:
return True
else:
return False


class StackException(Exception): # 自定义异常类
def __init__(self, data):
self.data = data

def __str__(self):
return self.data



if __name__ == '_main_':
stack = PyStack() # 创建栈
for i in range(10):
stack.push(i) # 元素进栈
print(stack.a_top()) # 输出栈顶的位置
for i in range(10):
print(stack.pop()) # 元素出栈
stack.empty() # 清空栈
for i in range(21):
stack.push(i) # 此处引发异常



这个是书上介绍python堆栈的程序,但是我运行后没有出现想要的结果,而且不知道问题在哪?
...全文
284 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
studentlsc 2016-04-03
  • 打赏
  • 举报
回复
引用 2 楼 bealing 的回复:
[quote=引用 1 楼 bealing 的回复:] 有以下几处错误: 1)if __name__ == '_main_': 应该是if __name__ == '__main__': main前后是双下划线 2)def is_empty(self): # 是否为空栈 if self.stack == -1: # 这里应该是 if self.top == -1: 3) def pop(self): # 元素出栈 if self.is_full(): # 这里应该是 if self.is_empty(): 还有一点很不合理的地方,就是线性栈的原理是操作栈顶位置Top,所以清空栈就是将top置为-1,而不是新建一个列表
第三点写的不太合理,我的意思是pop操作先判空,不为空再取值 if self.is_full(): # 这里应该是 if not self.is_empty(): [/quote] 你好,是我编写的时候没有用心检查,谢谢指导啊
studentlsc 2016-04-03
  • 打赏
  • 举报
回复
嗯嗯,谢谢指导,我去试试
xSeeker~ 2016-04-03
  • 打赏
  • 举报
回复
引用 1 楼 bealing 的回复:
有以下几处错误: 1)if __name__ == '_main_': 应该是if __name__ == '__main__': main前后是双下划线 2)def is_empty(self): # 是否为空栈 if self.stack == -1: # 这里应该是 if self.top == -1: 3) def pop(self): # 元素出栈 if self.is_full(): # 这里应该是 if self.is_empty(): 还有一点很不合理的地方,就是线性栈的原理是操作栈顶位置Top,所以清空栈就是将top置为-1,而不是新建一个列表
第三点写的不太合理,我的意思是pop操作先判空,不为空再取值 if self.is_full(): # 这里应该是 if not self.is_empty():
xSeeker~ 2016-04-03
  • 打赏
  • 举报
回复
有以下几处错误: 1)if __name__ == '_main_': 应该是if __name__ == '__main__': main前后是双下划线 2)def is_empty(self): # 是否为空栈 if self.stack == -1: # 这里应该是 if self.top == -1: 3) def pop(self): # 元素出栈 if self.is_full(): # 这里应该是 if self.is_empty(): 还有一点很不合理的地方,就是线性栈的原理是操作栈顶位置Top,所以清空栈就是将top置为-1,而不是新建一个列表

37,737

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧