а условие игнорируется, если для l oop вложено внутрь - PullRequest
0 голосов
/ 20 апреля 2020

Мне интересно, почему в python при попытке:

count = 0

while count < 3:
    for i in range(40):
        count += 1

фактически не проверяет условие l oop. В то время как в

count = 0

for i in range(40):
    while count < 3:
        count += 1

делает. Сначала я предположил, что, возможно, время l oop следует игнорировать, пока итерации не будут завершены. Но если я запускаю 2 разных цикла:

count = 0

while count < 3:
    for i in range(40):
        count += 1

    for i in range(40):
        count += 1

То же самое происходит! count станет 80. Я часто использую циклы while и удивляюсь, что никогда с этим не сталкивался. Пока l oop проверяется только в конце его содержимого? Если так, как я мог бы написать вариант первого тела кода

Ответы [ 2 ]

3 голосов
/ 20 апреля 2020
Состояние

A while l oop проверяется до того, как начинается его тело, и всякий раз, когда его тело заканчивается. Если вы добавите дополнительные циклы в тело, все они должны завершить sh до того, как while l oop войдет в следующую итерацию.

Если вы хотите явно завершить l oop до его Тело закончено, вам нужно будет использовать break - но если вы находитесь внутри вложенного l oop, то break завершит только самый внутренний l oop!

Если по какой-то причине вы действительно нужно завершить внешний l oop изнутри внутреннего l oop, тогда самым чистым способом было бы поместить все это в функцию и использовать return. Смотрите также: Как вырваться из нескольких циклов?

2 голосов
/ 20 апреля 2020

Условие while l oop проверяется каждый раз, когда выполнение попадает в эту строку. Я думаю, вы хотите что-то вроде этого:

count = 0

for i in range(40):
    if count < 3:
        count += 1
    else:
        break
...