Почему Python для l oop не зацикливается с l oop внутри - PullRequest
0 голосов
/ 21 марта 2020

Мне действительно интересно это.

У меня есть для l oop, который просматривает список. Внутри для l oop у меня есть время l oop, через которое я хочу l oop, пока не будет выполнено условие. Когда условие while l oop выполнено, остановите while l oop и перейдите к следующему пункту списка и снова запустите while l oop.

Вот пример кода :

course_ids = [1,2,3,4,5]

loop_control = 0
counter = 0

for ids in course_ids:
    while loop_control == 0:
        counter = counter + 1
        if counter == 2:
            loop_control = 1

Проблема в том, что когда выполняется условие l oop, оно полностью выходит за l oop.

Как получить значение для l oop чтобы работать, как задумано, некоторое время l oop внутри него?

Ответы [ 3 ]

1 голос
/ 21 марта 2020

Вы устанавливаете l oop control в 1 в операторе if. В то время как l oop настроен на запуск только в том случае, если управление l oop равно 1. Таким образом, в основном при первом запуске вы устанавливаете условие, чтобы никогда больше не запускаться.

Если вы должны были сбросить l oop устанавливает на ноль на каждой итерации для l oop, время будет выполняться каждый раз.

course_ids = [1,2,3,4,5]

# loop_control = 0 <-- Remove this line
counter = 0

for ids in course_ids:
    loop_control = 0 # place this line and see it work more than once.
    while loop_control == 0:
        counter = counter + 1
        if counter == 2:
            loop_control = 1
0 голосов
/ 21 марта 2020

Вы все правы.

Я не сбросил условие l oop

. Я добавил эти строки после для l oop, и это исправило проблему

if counter != len(course_ids):
    loop_control = 0
0 голосов
/ 21 марта 2020

Ваше предположение неверно, что оно вырвалось из-за oop в целом. Это не так, оно выполняется, но условие while никогда не True, и, следовательно, оно никогда не запускается внутри него.

Вы также можете проверить это, добавив оператор печати внутри для l oop и увидев его output.

course_ids = [1,2,3,4,5]

loop_control = 0
counter = 0

for ids in course_ids:
    print("here")
    while loop_control == 0:
        counter = counter + 1
        if counter == 2:
            loop_control = 1

Output:

here
here
here
here
here

Как вы можете видеть, он работал 5 раз, как и ожидалось. Вы также должны рассмотреть визуализацию кода для лучшего понимания, см. здесь

...