Python: выход из цикла while при выполнении условия

#python

#python

Вопрос:

Я пытаюсь выполнить итерацию по моему списку и вычислить разницу между каждым элементом и следующим за ним элементом. Если разница больше 0 (или положительная), то увеличьте up и уменьшите down на 1 (если она больше 0). Аналогично , если разница меньше 0 , то увеличивайте down и уменьшайте up на 1 ( если больше 0 ) . Я хочу выйти из цикла, если либо значение up or down превышает limit значение 3.

Мой код:

 my_list = [13.04, 12.46, 13.1, 13.43, 13.76, 13.23, 12.15, 12.0, 11.55, 14.63]

up = 0
down = 0
limit = 3

while (up < limit) or (down < limit) :
    for i in range(len(my_list)-1):
        diff = my_list[i] - my_list[i 1]
        print (diff)
        if diff > 0:
            up  =1
            if down > 0:
                down -=1
        elif diff < 0:
            down  =1
            if up > 0:
                up -=1
 

Очевидно, что это не работает, так как я продолжаю увязать в бесконечном цикле и не могу понять, что я делаю не так.

Ответ №1:

Условие while неверно. Цикл продолжает выполняться , пока либо up или down находится ниже limit , поэтому он не остановится даже тогда , когда up=1000 , пока down<3 . Вместо этого вы хотите while (up < limit) and (down < limit) .

Ответ №2:

не используйте while , вы можете использовать условие if в последнем цикле for для его разрыва :

 for i in range(len(my_list)-1):
    diff = my_list[i] - my_list[i 1]
    #print (diff)
    if diff > 0:
        up  =1
        if down > 0:
            down -=1
    elif diff < 0:
        down  =1
        if up > 0:
            up -=1
    if (up > limit)or (down > limit) :print(up);print(down);break
 

Комментарии:

1. В то время как основной вопрос был изменен and на or , этот тоже имеет смысл

Ответ №3:

Проблема в вашем состоянии. Вы сказали, что хотите выйти из программы, если либо up или down превышает значение limit , равное 3. Таким образом, условие в цикле while должно быть установлено как while up is less than limit AND down is also less than limit , только после этого выполнить тело цикла. Что-то вроде этого.

 while up < limit and down < limit:
 

или вы также можете использовать скобки (в данном случае это не имеет значения)

 while (up < limit) and (down < limit):
 

Таким образом, полная программа будет

 my_list = [13.04, 12.46, 13.1, 13.43, 13.76, 13.23, 12.15, 12.0, 11.55, 14.63]

up = 0
down = 0
limit = 3

while up < limit and down < limit:
    for i in range(len(my_list)-1):
        diff = my_list[i] - my_list[i 1]
        print (diff)
        if diff > 0:
            up  =1
            if down > 0:
                down -=1
        elif diff < 0:
            down  =1
            if up > 0:
                up -=1