2015-09-07 61 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循環條件隨棧不空而變化。