2015-09-07 59 views
3

这是这是造成我的程序崩溃小代码段由于无限循环奇怪而回路使无限循环

while not stack.is_empty(): 
    if operators[stack.peek()] >= operators[character]: 
     result += stack.pop() 

其中堆栈是一个堆栈的对象和操作员是一个字典。 下面的代码但不会导致无限循环

while not stack.is_empty() and operators[stack.peek()] >= operators[character]: 
    result += stack.pop() 

我的问题是:是不是这些代码段基本上是一回事吗?为什么一个造成一个无限循环而另一个不是?

感谢

回答

3

第一个循环不断通过和堆栈偷看,并检查条件是否为真,但仍在继续。在第二个它切断后的条件为假

+3

......这意味着您可以通过在第一个中添加一个“else:break”来使它们等价。 – xtofl

+1

哦,哇,我不能相信我没有看到,谢谢 – Jacklin213

2
while not stack.is_empty(): 
    if operators[stack.peek()] >= operators[character]: 
     result += stack.pop() 

这里,while循环运行,直到堆栈是空的,你只弹出了>=,它留下的堆栈一些元素<条件。因此,为了使堆栈变空,stack.size()==次operators[stack.peek()] >= operators[character]数量是true


while not stack.is_empty() and operators[stack.peek()] `>=` operators[character]: 
    result += stack.pop() 

在这里,你是只允许它只有在继续>=限制while循环条件随栈不空而变化。