我正在尝试查找一个数字从其原始序列移位的次数。我按升序交换数字,并计算交换数。如果计数> 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)
答案 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)有助于发现问题。
希望我能帮上忙。