我用Python创建了一个程序,如果a
和b
元素的数目相等,则返回布尔真值,否则返回False。每次运行它时,我都会得到一个“True”输出,而不是“False”。有人能找出我代码的问题吗?你知道吗
def equal(s):
s = Stack()
stack_a = Stack()
stack_b = Stack()
while not s.is_empty():
if s.top() == 'a':
var = s.pop()
push(stack_a, var)
else:
var = s.pop()
push(stack_b, var)
if stack_a.size() == stack_b.size():
return True
else:
return False
my_list = ['a', 'a', 'a', 'b']
print equal(my_list)
您的
equal
函数接受一个名为S
的参数,但是就在函数的开头,您正在用一个新创建的空堆栈S = Stack()
覆盖传递到函数中的S
的内容,所以只要删除该行,您就少了一个bug。你知道吗另外,我认为可以公平地建议您的
push()
函数,无论您在哪里定义它,都应该是Stack
类的一个方法;否则,将堆栈定义为一个类而不是将所有与堆栈紧密相关的操作以方法的形式放入该类是没有意义的。你知道吗假设您的
Stack
类是堆栈容器的某个有效实现,那么您似乎正在创建一个空的堆栈可能你想用
所以检查是否有相同数量的“a”和“b”总是返回True(如
StackA.size() == 0
和StackB.size() == 0
)而且,更简单的方法是
或者(正如埃里克·阿利克建议的那样)
以及你的问题
重写堆栈以获得0的长度,修复后将出现崩溃,因为您正在使用:
而不是
请注意,快速的方法是
相关问题 更多 >
编程相关推荐