如果在while循环中多次未检查条件

2024-04-16 13:17:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着找出一个数从原来的序列中移位的次数。我按升序交换数字,然后计算交换的数量;如果计数大于3,则中断循环。你知道吗

但到目前为止,当我检查这些数字时,第一次迭代只执行if条件,之后它不检查条件。我试图理解为什么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)

Tags: input数量indexifcount序列数字条件
1条回答
网友
1楼 · 发布于 2024-04-16 13:17:12

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

假设您的列表如下所示:

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)有助于识别问题。你知道吗

希望我能帮上忙。你知道吗

相关问题 更多 >