while inside else inside while not breaking in Python

while inside else inside while not breaking in Python

我在 else 语句中有一个 while 循环,该语句包含在另一个 while 循环中。像这样:while->else->while。我正在更新内部 while 循环中的一些变量,这些变量也构成了外部 while 循环的条件。我期望的是,一旦内部 while 循环中的变量取值打破了外部 while 循环的条件,外部 while 循环就会中断。但这似乎并没有发生,内部 while 循环保持 运行。最终我得到一个错误,因为循环没有停止并且条件仍然无效(IndexError:列表索引超出范围)

            nums=[0,0,0]
            i=0
            j=i+1
            k=len(nums)-1
            while(k>j):               
                s=nums[i]+nums[j]+nums[k]

              #greater than 0
                if s>0:    
                   #do something
              
                else:
                    #do something

                    while(nums[k]==nums[k-1]):#<<<<<<<------ here I get IndexError: list index out of range
                        print("2nd wihile ",k,j)
                        k-=1
                    k-=1
                    while(nums[j]==nums[j+1]):
                        
                        j+=1
                    j+=1

inner while 中的 print 语句在报错前打印如下:

2nd wihile  2 1
2nd wihile  1 1
2nd wihile  0 1
2nd wihile  -1 1
2nd wihile  -2 1
IndexError: list index out of range

看看下面的内容:

>>> x = 1
>>> while x == 1:
...  while True:
...   print("x", x)
...   x = 2

它总结了你的问题,即在内部子循环期间没有测试外部循环。
测试适用于每个iteration,一旦你引入一个内部循环,外部循环迭代并因此检查,停止直到外部循环的下一次迭代。