如果在while循环内没有多次检查条件

时间:2019-05-25 17:58:39

标签: python python-3.x if-statement while-loop

我正在尝试查找一个数字从其原始序列移位的次数。我按升序交换数字,并计算交换数。如果计数> 3,我就退出循环。

但是到目前为止,当我检查数字时,仅在条件条件执行时才进行第一次迭代,此后它不检查条件。我试图了解为什么if条件没有执行。

 def minimumBribes(q):
       x=q.copy()
       lis=[]
       i=0
       j=0
       count=0
       flag=0
       while i< len(q):
           k=j+1
           a=q[j]
           b=q[k]
           print(a,b)
           if a>b:
             print(a>b)
             x.pop(x.index(a))
             x.insert(x.index(b),a)

             print(x)
             flag+=1
             if flag>3:
                print('Too chaotic')
                break
             else:
                j+=1
           i+=1
       print(count)


if __name__ == '__main__':
    t = int(input())

    for t_itr in range(t):
        n = int(input())

        q = list(map(int, input().rstrip().split()))

        minimumBribes(q)

1 个答案:

答案 0 :(得分:0)

我用调试器浏览了您的代码,如果列表中的第一项大于第二项,则永远不会输入if-Statement。

说您的列表如下:

q = [1, 2, 4, 3, 8, 7, 6, 0, 10]

然后while循环的第一次迭代看起来像这样:

k = j + 1 # k = 1
a = q[j] # a = 1
b = q[k] # b = 2
print(a, b) # 1, 2
if a > b: # false
    ...

由于您的j仅在if语句内增加,因此a和b的值永远不会改变。
另外:我不知道为什么需要变量t,n和lis。它们是否在您的代码的另一部分中使用?如果是这样,请把它们从您的问题中删除,因为它们会引起混淆。

另一个提示是写一个问题:虽然您的代码可以独立执行(很大的优点),但最初的输入对我来说并不明显。提供具体的输入(在您的情况下,列表q)有助于发现问题。

希望我能帮上忙。