Как еще часть работы в продолжении заявления?

Я не уверен, как continue заявление интерпретируется, когда оно находится внутри for петля с else пункт.

Если условие верно, то break выйдет из for петля и else часть не будет выполнена. И если условие ложно, то else часть будет выполнена.

Но что насчет continue заявление? Я проверял, кажется, что после continue заявление достигнуто, else часть будет выполнена. Это правда?? Вот пример кода:

# when condition found and it's `true` then `else` part is executing :

edibles = ["ham", "spam", "eggs","nuts"]
for food in edibles:
    if food == "spam":
        print("No more spam please!")
        continue
    print("Great, delicious " + food)

else:
    print("I am so glad: No spam!")
print("Finally, I finished stuffing myself")`

Если я удаляю "спам" из списка, теперь условие всегда false и не найден, но все же else часть выполнена:

edibles = ["ham","eggs","nuts"]
for food in edibles:
    if food == "spam":
        print("No more spam please!")
        continue
    print("Great, delicious " + food)

else:
    print("I am so glad: No spam!")
print("Finally, I finished stuffing myself")

2 ответа

Решение

Ваш else часть будет выполнена в обоих случаях. else Часть выполняется, когда цикл завершается, когда условие не найдено. Что происходит в вашем коде. Но это также будет работать без continue заявление.

Теперь, что касается остальной части оператора break, остальная часть оператора Break будет выполняться, только если:

  • Если цикл завершается нормально, без перерыва.
  • Если цикл не встречается с перерывом.

С for цикл в Python, else блок выполняется, когда цикл заканчивается нормально, то есть нет break заявление. continue не влияет на это в любом случае.

Если цикл for заканчивается из-за break заявление, то else блок не будет выполняться. Если цикл выходит нормально (нет break), то else блок будет выполнен.

Из документов:

При использовании с циклом предложение else имеет больше общего с предложением else оператора try, чем с выражением if: предложение else оператора try выполняется, когда не возникает исключение, а условие else цикла выполняется, когда не происходит прерывания.,

Я всегда помню это из-за того, как Раймонд Хеттингер описывает это. Он сказал, что это должно было быть названо nobreak вместо else, (Это также хорошее видео, которое объясняет полезность конструкции for-else)

Пример:

numbers = [1,2,3]
for number in numbers:
    if number == 4:
        print("4 was found")
        break
else:
    print("4 was not found")

Когда вы запускаете приведенный выше код, так как 4 отсутствует в списке, цикл не будет break и else пункт напечатает. Если вы добавите 4 к списку и запустите его снова, он будет break и else не будет печатать. В большинстве других языков вам нужно было бы добавить несколько часовых булевых found и сделать это True если вы найдете 4, тогда выведите оператор только после цикла, если found является False,

Другие вопросы по тегам