关于栈的代码的疑问
定义一个栈(Stack)类,用于模拟一种具有后进先出(LIFO)特性的数据结构class Stack:def __init__(self, start=[]):
self.stack = []
for x in start:
self.push(x)
def isEmpty(self):
return not self.stack
def push(self, obj):
self.stack.append(obj)
def pop(self):
if not self.stack:
print('警告:栈为空!')
else:
return self.stack.pop()
def top(self):
if not self.stack:
print('警告:栈为空!')
else:
return self.stack[-1]
def bottom(self):
if not self.stack:
print('警告:栈为空!')
else:
return self.stack
1.在这个代码中的2~5行是一个初始化的过程,他先定义了一个空栈,然后又把start列表里面的内容穿进去?start在第二行方法后面的定义中不是已经定义start=【】空列表了吗?空列表怎么传到栈里面去啊
2.第八行的代码中有个returnnot self.stack这个代码什么意思啊?返回的是什么?self.stack在第3行不是已经定义为一个栈了吗?
3.还有我想问一下第15行的print('警告')和第 17行的return self.stack.pop()这两个语句在显示和作用上有没有什么区别啊?这两个语句一直弄混,不知道什么情况下用print什么情况下用return能说明一下吗 @Twilight6 本帖最后由 Twilight6 于 2020-6-18 17:24 编辑
波大大12138 发表于 2020-6-18 17:15
@Twilight6
1.在这个代码中的2~5行是一个初始化的过程,他先定义了一个空栈,然后又把start列表里面的内容穿进去?start在第二行方法后面的定义中不是已经定义start=【】空列表了吗?空列表怎么传到栈里面去啊
start = [] 是设置了默认参数的值,而如果是空列表for 循环就不会执行,而如果你传入了你自己的列表 那么久将你这个列表逐个放入栈中
2.第八行的代码中有个returnnot self.stack这个代码什么意思啊?返回的是什么?self.stack在第3行不是已经定义为一个栈了吗?
第八行就算调用看栈是否为空栈 , 因为 not [] 会返回 1 而如果 栈里面有元素就返回 0
3.还有我想问一下第15行的print('警告')和第 17行的return self.stack.pop()这两个语句在显示和作用上有没有什么区别啊?这两个语句一直弄混,不知道什么情况下用print什么情况下用return能说明一下吗
有区别,print 只是单纯的打印,没有返回值,也就是打印数值到屏幕上给我们看的,而return 是函数返回时候用的 , 只能在函数内用 ,没有print的就不会打印显示返回值
但是你在IDLE 或者其他编辑器的控制台会自动打印返回值 Twilight6 发表于 2020-6-18 17:22
start = [] 是设置了默认参数的值,而如果是空列表for 循环就不会执行,而如果你传入了你自己的列表...
每次你都是最快{:10_266:} xiaosi4081 发表于 2020-6-18 17:24
每次你都是最快
{:10_282:} 加油把 Twilight6 发表于 2020-6-18 17:25
加油把
大佬是不是写了什么程序,自动获取最新求助贴,并弹窗提醒你!!??{:10_277:} 第一问:假如有传列表,start就不是空列表,对列表进行循环添加,如果们没有对空列表循环也不会报错
第二问:这返回一个bool值,非空的列表位真。假如self.stack有值,返回一个False.反之返回True
第三问:
def pop(self):
if not self.stack:
print('警告:栈为空!')
else:
return self.stack.pop()
这函数,大致就是说,如果栈里面没有内容,就不要去pop(弹值因为会报错),如果有值再进行pop。
不知道什么情况下用print什么情况下用return能说明一下吗,这个问题不是很想说,这两个有本质的区别。
return是一个函数返回的标志
print 只是打印出来,两者有本质的区别,你都看到栈,类了,这两个应该要分清楚 yhhpf 发表于 2020-6-18 17:28
大佬是不是写了什么程序,自动获取最新求助贴,并弹窗提醒你!!??
{:10_245:} 没呢 {:10_245:} 本帖最后由 1223253411 于 2020-6-18 20:51 编辑
第一问:栈 首先你要知道栈模型是什么,你也说了它是一个后进先出的模型对吧,但!!!它是一种逻辑结构!,什么是逻辑结构呢,它表示的是一种数据与数据之间的抽象的,描述着数据的存储方式与结构。
所以,不是空列表怎么传进去的,而是用列表做了一个栈!然后让列表来满足栈的使用,也就是为栈创建方法,在传参的时候如果传了一个列表就把传入的列表数据拿出放到栈中。
第二问:问一下,bool值为false的情况有哪些,空,零,不存在,对不对,那self.stack为空也就是当栈为空的时候,是不是就返回了false,not是不是就把false变为了true,也就是在栈为空时,返回一个true
第三问:你看,它是不是和第二问一样,在栈为空的也就时列表为空的情况下返回true,那样的话还能返回数据吗,没数据怎么返回数据,就给你打印一句咯,它也可以不打印,你是定义者,所有的东西你来决定,你不想让它打印就不让它打印,可以就让它返回一个None,反正只要提醒使用者栈为空无法提取数据就行,
那有数据怎么办呢,给他啊,谁调用的这个方法就给谁啊,这个栈使用列表做的对吧,栈是什么,后进先出,当以列表的首部作为栈底,尾部作为栈顶,那要返回的方法是不是应该从列表的尾部返回数据,pop不就是让列表的尾部数据弹出的方法吗,不解释pop{:10_277:},所以使用return将栈顶元素返回给使用者
ps: 一个逻辑结构可以由多个存储结构来完成,所以只不过这里是用了列表来完成这个模型,你也可以用其他的,只要满足线性结构、后进先出的原则,满足栈的使用方法,就行
我可能说的有一些不严谨,如果还有不理解的地方,或我有什么地方说错了,就和我说一下,我在改改
1223253411 发表于 2020-6-18 20:23
第一问:栈 首先你要知道栈模型是什么,你也说了它是一个后进先出的模型对吧,但!!!它是一种逻辑结 ...
谢谢{:5_109:}
页:
[1]