Если условие не проверено несколько раз внутри цикла while - PullRequest
0 голосов
/ 25 мая 2019

Я пытаюсь определить, сколько раз число смещается от своей первоначальной последовательности.Я меняю номер в порядке возрастания и считаю количество обменов;если счет> 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)

1 Ответ

0 голосов
/ 26 мая 2019

Я просмотрел ваш код с помощью отладчика, и оператор 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) очень помогает в определении проблемы.

Надеюсь, я вам помог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...