- en
- Language: ru
- Documentation version: latest
21. for/else
¶
Циклы являются неотъемлемой частью любого языка. Точно так же циклы for
являются важной частью Python. Однако есть несколько вещей, которые большинство начинающих не знают о них. Мы рассмотрим некоторые из них по порядку.
Давайте начнем с того, что мы знаем. Мы знаем, что можем использовать циклы for
вот так:
fruits = ['apple', 'banana', 'mango']
for fruit in fruits:
print(fruit.capitalize())
# Output: Apple
# Banana
# Mango
Это самая базовая структура цикла for
. Теперь давайте перейдем к некоторым менее известным особенностям циклов for
в Python.
21.1. else
Клауза¶
<<<В циклах for
также есть пункт else
, с которым большинство из нас незнакомы. Пункт else
выполняется после нормального завершения цикла. Это означает, что цикл не встретил оператора break
. Они действительно полезны, когда вы понимаете, где их использовать. Я сам узнал о них гораздо позже.
Обычная конструкция заключается в запуске цикла и поиске элемента. Если элемент найден, мы выходим из цикла с помощью оператора break
. Существует два сценария, при которых цикл может завершиться. Первый - когда элемент найден и встречается оператор break
. Второй сценарий - цикл завершается, не встретив оператора break
. Теперь мы можем захотеть узнать, какой из этих вариантов является причиной завершения цикла. Один из методов - установить флаг и затем проверить его после завершения цикла. Другой способ - использовать предложение else
.
Это основная структура цикла for/else
:
for item in container:
if search_something(item):
# Found it!
process(item)
break
else:
# Didn't find anything..
not_found_in_container()
Рассмотрим этот простой пример, который я взял из официальной документации:
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print(n, 'equals', x, '*', n/x)
break
Он находит коэффициенты для чисел от 2 до 10. Теперь самое интересное. Мы можем добавить дополнительный блок else
, который отлавливает числа, не имеющие коэффициентов и, следовательно, являющиеся простыми числами:
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print( n, 'equals', x, '*', n/x)
break
else:
# loop fell through without finding a factor
print(n, 'is a prime number')