Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 26 октября 2023 года; проверки требуют 3 правки.

## Длительность менструального цикла
Продолжительность цикла определяется физиологическими процессами в организме женщины.
Нарушения периода менструального цикла могут быть вызваны различными факторами: от подростковых гормональных колебаний, беременности и других естественных причин до различных внешних и внутренних стрессов.
Прекращение менструаций происходит в возрасте 40—58 лет (в среднем, в 47—50 лет), в период климакса происходит угасание репродуктивной функции. Время наступления менопаузы (климакс — период, характеризующийся нерегулярностью или полным прекращением менструаций) зависит в большей степени от наследственности, однако некоторые заболевания и врачебные вмешательства могут вызвать раннее наступление менопаузы.
Процессы в яичнике в течение менструального цикла:
1 Менструация
2 Созревающий фолликул
3 Граафов фолликул
4 Овуляция
5 Жёлтое тело
6 Жёлтое тело прекращает функционировать
Процессы, происходящие в течение менструального цикла, могут быть описаны как фазы, соответствующие изменениям в яичниках (фолликулярная, овуляторная и лютеиновая), и в эндометрии (менструальная, пролиферативная и секреторные фазы).
При наступлении беременности жёлтое тело начинает вырабатывать прогестерон до тех пор, пока плацента не разовьётся и не станет секретировать эстроген и прогестерон.
* 4 апр 2023
Они есть практически в каждом языке программирования, но в Python с ними работать приятнее всего. Как, впрочем, и со всем остальным.
Иллюстрация: Катя Павловская для Skillbox Media

Журналист, изучает Python. Любит разбираться в мелочах, общаться с людьми и понимать их.
Код в Python обычно выполняется последовательно: первая строка, потом вторая, третья и так далее. Но некоторые конструкции позволяют нарушать этот порядок, чтобы совершать более сложные операции.
Например, **циклы** выполняют один и тот же блок кода несколько раз. В Python есть два основных вида циклов: **while** и **for**. О них и поговорим.
---
Любой цикл состоит из двух обязательных элементов:
* **условие** — начальный параметр; цикл запустится только при его выполнении и закончится, как только условие перестанет выполняться;
* **тело** — сама программа, которая выполняется внутри цикла.
Схематически его можно представить так:

_Инфографика: Майя Мальгина для Skillbox Media_
В синтаксисе Python в конце строки с условием ставится двоеточие, а всё тело выделяется отступом (табуляцией или четырьмя пробелами).
```python
программа до цикла
условие:
первая строка тела
вторая строка тела
программа после цикла
Цикл While
While — наиболее простой и понятный вид цикла. Его ещё называют циклом с предусловием.
x = 1
while x < 5:
print(x)
x += 1 # Означает то же самое, что x = x + 1
>>> 1
>>> 2
>>> 3
>>> 4
С языка Python на русский программу можно перевести так: Пока икс меньше пяти, печатай икс и прибавляй к нему единицу.
Но в простоте while кроется и опасность: его легко сделать бесконечным. Например, если в коде выше мы уберём x += 1, то получится вот так:
## Этот код будет выполняться бесконечно
x = 1
while x < 5:
print(x)
Здесь с переменной x ничего не происходит. Она всегда равна единице, поэтому условие цикла никогда не перестанет выполняться. Соответственно, он никогда не завершится.
Чтобы избежать таких ситуаций, при использовании while нужно следить: перестанет ли когда-нибудь выполняться условие? Ещё можно использовать оператор break — о нём мы расскажем чуть позже.
Цикл For
Цикл for программисты используют куда чаще, чем while. Для него мы устанавливаем не условие в чистом виде, а некий массив данных: список, кортеж, строку, словарь, диапазон или любой другой.
На каждой итерации цикла программа как бы спрашивает: Остались ли в объекте ещё элементы, по которым я не прошла?
num_list = [14, 101, -7, 0]
for number in num_list:
print(number)
>>> 14
>>> 101
>>> -7
>>> 0
Здесь переменная number обновляется при каждом новом витке цикла. Сначала она хранит в себе первый элемент, потом второй, и так — пока список не закончится.
Когда нужно применить for к числовому промежутку, его можно задать диапазоном. Для этого используют функцию range(). В неё можно передать от одного до трёх аргументов.
Если аргумент один, то сформируется диапазон от нуля до числа, предшествующего значению аргумента.
for i in range(3):
print(i)
>>> 0
>>> 1
>>> 2
Если аргумента два, то сформируется диапазон от значения первого аргумента до числа, предшествующего значению второго аргумента.
for i in range(23, 26):
print(i)
>>> 23
>>> 24
>>> 25
Если аргумента три, то первые два работают, как в прошлом случае. Третий же означает шаг, с которым числа следуют друг за другом.
for i in range(10, 20, 3):
print(i)
>>> 10
>>> 13
>>> 16
>>> 19
Если в теле цикла for выполняется всего одно действие, синтаксис Python позволяет сократить его запись до:
i for i in iterable_object
Это синтаксический сахар, который не добавляет новой функциональности, но влияет на внешний вид кода. Так можно легко и быстро генерировать списки.
num_list = [i for i in range(1, 11)]
print(num_list)
>>> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10
```markdown
## Генераторы списков
В такую конструкцию также можно добавить дополнительное условие. Сделаем генератор, который будет выводить только чётные числа. При этом не будем создавать переменную для получившегося списка, а сразу напечатаем его.
```python
print([i for i in range(1, 11) if i % 2 == 0])
>>> [2, 4, 6, 8, 10]
Конструкция if i % 2 == 0 означает: если при делении i на 2 остаток равен 0.
С самой переменной i тоже можно проводить операции. Используем предыдущий генератор, но теперь будем выводить не сами чётные числа, а их квадраты.
print([i ** 2 for i in range(1, 11) if i % 2 == 0])
>>> [4, 16, 36, 64, 100]
Прерывание цикла
Главное при таком подходе — сильно не увлекаться. Если код тяжело прочесть и понять (например, когда к i применяется сразу несколько функций и методов и вдобавок задаётся сложное условие), то лучше разбить его на несколько строк. Понятность важнее лаконичности.
Бывают случаи, когда нужно завершить цикл принудительно, даже если его условие всё ещё выполняется. В таких случаях используют ключевое слово break.
string = Hi, loop!
for i in string:
if i == ,:
break
print(i)
>>> H
>>> i
Если же в строке запятой не будет, то цикл пройдёт по каждому её символу — и только потом завершится.
string = Hi loop!
for i in string:
if i == ,:
break
print(i)
>>> H
>>> i
>>>
>>> l
>>> o
>>> o
>>> p
>>> !
Пропуск итераций цикла
Иногда возникает необходимость принудительно начать следующий шаг цикла, пропустив часть строк в его теле. Для таких случаев существует ключевое слово continue.
for i in range(1, 10):
if i % 2 == 0 or i % 3 == 0:
continue
print(i)
>>> 1
>>> 5
>>> 7
Как видим, если срабатывает условие if (то есть если число делится на 2 или на 3 без остатка), то оставшаяся часть тела не работает — и i не печатается.
Ключевое слово else
Обычно ключевое слово else употребляют в связке с if, но у него есть и другое применение. Его можно использовать вместе с while или for. В таком случае else-код выполнится после того, как пройдут все витки цикла.
Если же цикл досрочно прервётся из-за break, то часть программы в else не выполнится.
string = Hi, loop!
for i in string:
if i == ,:
break
print(i)
else:
print(Цикл завершился без break)
>>> H
>>> i
В строке была запятая, сработал break — не выполнилось else-условие. Теперь уберём из неё запятую и посмотрим, что получится.
string = Hi loop!
for i in string:
if i == ,:
break
print(i)
else:
print(Цикл завершился без break)
>>> H
>>> i
>>>
>>> l
>>> o
>>> o
>>> p
>>> !
>>> Цикл завершился без break
Цикл прошёл все свои итерации, завершился самостоятельно, и поэтому код в else выполнился. Он также будет работать, если цикл не совершил ни одного витка.
while 1 == 0:
print(Эта строка никогда не выполнится)
else:
print(Цикл завершился без break)
```markdown
Цикл завершился без break
Иногда использовать бесконечный цикл может быть хорошей идеей. Например, мы пишем игру: она должна работать до тех пор, пока игрок из неё не выйдет. В этом случае в условии выхода нужно будет прописать break.
Чтобы цикл был бесконечным, его **условие должно выполняться всегда**. Это можно сделать разными способами.
### Способ №1 — пока истинно
```python
while True:
pass # pass — оператор-заглушка, который ничего не делает
Если сделать while False, то цикл, наоборот, никогда не начнётся.
Способ №2 — пока проверяемое значение — любое ненулевое число
while 1:
pass
while -4:
pass
while 2023:
pass
Если сделать while 0, то цикл никогда не начнётся.
Способ №3 — пока проверяемое значение — непустой элемент
while string:
pass
while [False, list, 0]:
pass
Если после while поставить пустой элемент — например, строку str() или список list(), то цикл никогда не начнётся.
Способ №4 — корректное уравнение
while 1 == 1:
pass
while 0 != 1:
pass
Альтернативный подход — поместить после while переменную, в которой лежит подходящее условие. Например:
## Способ №1
condition = True
while condition:
pass
## Способ №2
condition = 1
while condition:
pass
## Способ №3
condition = string
while condition:
pass
В таких случаях для выхода из цикла можно не использовать оператор break, а заменить значение в переменной condition на False, 0, None или любой пустой элемент. Цикл закончит последний виток и завершится, потому что условие больше не будет выполняться.
Такой подход применяется, когда нужно завершить цикл из других мест программы: например, из функции или вложенного цикла. Ещё одно отличие: так как цикл завершается естественно, без оператора break, в нём выполнится else-код (если он есть).
condition = True
x = 0
while condition:
print(x)
x += 1
if x == 3:
condition = False
else:
print(Цикл завершился без break)
## Вывод
## 0
## 1
## 2
## Цикл завершился без break
В некоторых языках программирования есть ещё один вид цикла — с постусловием. Он всегда проходит хотя бы один виток и только после этого проверяет, выполняется ли условие.
В Java и C++ такое достигается с помощью конструкции do while, но в Python её нет. Зато можно сделать аналог. Для этого нужно использовать бесконечный цикл, а внутри его тела прописать условие завершения.
x = 12
while True:
x += 1
print(x)
if x > 5:
break
Каким бы ни было значение x, такой цикл пройдёт хотя бы один виток. А это и есть постусловие.
Циклы в Python можно вкладывать друг в друга — то есть в теле одного цикла вызывать другой. Логика программы при этом усложняется.
Можно вкладывать друг в друга сколько угодно циклов. При этом для каждого нового уровня вложенности нужно увеличивать отступ. Выглядит это так:
`while condition:
pass
while inner_condition:
pass
pass
`
Напишем программу, которая будет выводить номер итерации внешнего и внутреннего цикла.
`for i in range(3):
print(f'Итерация внешнего цикла: {i}')
for j in range(2):
print(f'Итерация внутреннего цикла: {j}')
>>> Итерация внешнего цикла: 0
>>> Итерация внутреннего цикла: 0
>>> Итерация внутреннего цикла: 1
>>> Итерация внешнего цикла: 1
>>> Итерация внутреннего цикла: 0
>>> Итерация внутреннего цикла: 1
>>> Итерация внешнего цикла: 2
>>> Итерация внутреннего цикла: 0
>>> Итерация внутреннего цикла: 1
`
* **Циклы** — один из основных инструментов любого Python-разработчика. С их помощью всего за пару строчек кода можно совершить сразу **множество повторяющихся действий**.
* Циклы состоят из **условия** и **тела**. Код в теле выполняется только до тех пор, пока соблюдено условие.
* В Python есть **два вида циклов**: while и for. В while условие задаётся явным образом. В for перебирается каждый элемент коллекции.
* К обоим видам можно применять разные **операторы**: break для прерывания, continue для пропуска части тела, else для совершения последнего действия перед выходом из цикла.
* Циклы можно **делать бесконечными** (тогда программа никогда не завершится или завершится только при выполнении определённого условия) и **вкладывать друг в друга**.

**Заставьте нейросети работать на вас!**
Расскажем на бесплатном вебинаре: 13 топ-экспертов, кейсы и практика. Научитесь применять ИИ и зарабатывайте больше!
_С момента первой овуляции организм женщины готов к беременности, и репродуктивная система начинает работать в циклическом режиме. Это проявляется в виде ежемесячных кровянистых выделений, или менструаций, поэтому женский цикл называется менструальным (от лат. menstruus «месячный цикл»). Рассказываем, из каких фаз он состоит и что при этом происходит с организмом женщины._
## Сколько длится менструальный цикл
Иногда его ещё называют «менструационный цикл», что не является медицинским термином. Интересно, что первая овуляция предшествует первой менструации (или «менархе»), а не наоборот. Просто у овуляции нет таких заметных внешних проявлений, как , и обнаружить её без специальных методов не получится.

Кровянистые выделения — это наиболее заметный признак, который легко отслеживать. Поэтому первый вопрос гинеколога на приёме всегда будет о первом дне, когда они появились, то есть о начале последней менструации.
_Чаще всего менструальный цикл длится 28–30 дней, однако нормальной продолжительностью является 21–38 дней (от первого до первого дня). Она может отличаться у разных женщин, а также изменяться в течение жизни._
## Регуляция менструального цикла
(как и у мужчин) управляется гормонами. Гипоталамус в головном мозге вырабатывает факторы, влияющие на гипофиз, который производит гормоны для управления яичниками. Яичник, в свою очередь, вырабатывает гормоны для управления маткой и даёт «обратную связь» гипоталамусу и гипофизу. Круг замыкается.

Чтобы было проще понять механизм, остановимся на трёх участниках женского цикла:
* яичниках (фолликулах, жёлтом теле);
**Эндометрий** — внутренний слой матки, предназначенный для имплантации эмбриона. Каждый месяц он вырастает и отторгается в виде менструальных выделений, если беременность не случилась.
**Фолликул** — рабочая единица яичника, которая состоит из стенки, вырабатывающей гормоны, и ооцита (яйцеклетки).
### **Что происходит с гормонами во время месячных?**
Во время менструации гормоны яичника эстрадиол и прогестерон находятся на минимальном уровне. Именно снижение их уровня и является причиной отторжения эндометрия и появления кровянистых выделений. **Гипофиз** реагирует на снижение эстрадиола увеличением выработки фолликулостимулирующего гормона (ФСГ), запуская новый цикл.
* яичниковый цикл (фолликулярная фаза, овуляция, фаза жёлтого тела);
* маточный цикл (менструация, фаза пролиферации, фаза секреции).
## Яичниковый цикл
### **Фолликулярная фаза**
Её также называют первой фазой цикла. В течение первых дней (обычно три–пять дней, но бывает и дольше) в яичнике будет затишье.

Затем несколько фолликулов начнут улавливать ФСГ и готовиться к участию в соревновании за право стать доминантным. Они будут расти и конкурировать. В итоге один фолликул продолжит рост, станет доминирующим, а остальные участники сойдут с дистанции.
В доминирующем фолликуле созревает яйцеклетка, а клетки, образующие стенку, вырабатывают большое количество эстрадиола для подготовки матки к беременности.
_Фолликулярная фаза может продолжаться от 7 до 25 дней в зависимости от времени, которое потребуется для инициации и роста фолликула. То есть она может отличаться у разных_ _или от цикла к циклу._
### **Овуляция**
Растущее количество эстрадиола также является сигналом для гипофиза, что пришло время овуляции. Он выбрасывает большое количество ЛГ — лютеинизирующего гормона («овуляторный пик ЛГ»), запуская цепочку реакций, которая закончится выходом яйцеклетки из яичника.
Наиболее часто под овуляцией понимают именно выход яйцеклетки в маточную трубу, где должна произойти встреча со сперматозоидом и оплодотворение. Однако это финал процесса овуляции.

Помимо отверстия в стенке фолликула для выхода яйцеклетки, выброс ЛГ запускает «дозревание» генетического материала яйцеклетки и переключает клетки стенки фолликула на режим жёлтого тела, благодаря чему начинается выработка прогестерона.
Прогестерон влияет на центр терморегуляции в головном мозге. Примерно через сутки после овуляции может появиться чувство жара, температура тела повышается на 0,5–0,8 °С. На этом основан метод определения наличия овуляции по графику базальной температуры. Однако он указывает на овуляцию ретроспективно, то есть примерно через день после выхода яйцеклетки. В таком случае вероятность наступления беременности будет ниже, чем при половой жизни до овуляции.
_Процессы, из которых состоит овуляция, занимают порядка 36–40 часов от сигнала гипофиза — пика ЛГ. Поэтому было бы верным выделить овуляторную фазу цикла, однако в терминологии сложилась традиция первой фазой цикла называть фолликулярную фазу, а второй — фазу жёлтого тела._
### **Лютеиновая фаза**
Это вторая фаза цикла, которую также называют фазой жёлтого тела.
Овуляторный пик ЛГ запускает процесс лютеинизации в клетках стенки фолликула, то есть превращения фолликула в жёлтое тело (от латинского corpus luteum, или «жёлтое тело», и происходит название лютеинизирующего гормона).
Яйцеклетка уже покинула фолликул и должна находится в маточной трубе. Эстрадиол продолжает вырабатываться, появляется прогестерон, который продолжит готовить эндометрий к имплантации и будет поддерживать беременность.
Большое количество ЛГ перед овуляцией создаёт задел для работы жёлтого тела примерно на семь дней. Через пять–семь дней после овуляции должна произойти имплантация эмбриона, клетки эмбриона (а именно хорион) начнут вырабатывать хорионический гонадотропин человека (ХГЧ). ХГЧ поддерживает работу клеток жёлтого тела, наращивая выработку прогестерона и эстрадиола для обеспечения питания эмбриона. Таким образом развивающаяся беременность будет поддерживать сама себя.

Если имплантации эмбриона не произошло и выработка ХГЧ не началась, то активность жёлтого тела пойдёт на спад, уровни эстрадиола и прогестерона будут постепенно снижаться. Регресс жёлтого тела происходит примерно в течение недели. В этот период чаще всего наблюдаются симптомы ПМС. Снижение количества гормонов приводит к утомляемости, плаксивости и раздражительности.
Когда прогестерон снизится настолько, что не сможет влиять на сосуды эндометрия, начнётся его отторжение — менструация. Гипофиз отреагирует на снижение эстрадиола подъёмом ФСГ, и менструальный цикл запустится заново.
_Продолжительность лютеиновой фазы является более постоянной в разных циклах и составляет 12–14 дней._
## Маточный цикл
Как было сказано выше, процессы в эндометрии управляются гормонами яичника, и разделение на фазы будет похожим. Но всё-таки некоторые отличия есть.
Менструальная фаза, или фаза десквамации (отслоения), — период, когда матка отторгает эндометрий, не пригодившийся для имплантации в прошлом цикле. Этот период соответствует минимальным значениям эстрадиола и прогестерона.
_В норме кровянистые выделения продолжаются от трёх до семи дней._
### **Фаза пролиферации**
Её также называют первой фазой маточного цикла. Под воздействием эстрадиола из растущего фолликула в эндометрии начинается деление клеток, проще говоря, набор толщины. Это первая стадия подготовки эндометрия к имплантации эмбриона.

Толщину эндометрия по УЗИ необходимо оценивать вместе с наличием и размером растущего фолликула. Если выбор и рост доминирующего фолликула по каким-либо причинам задерживается (длинные циклы или произошёл сбой), то эндометрий не должен набирать толщину.
_Фаза занимает от 7 до 14 дней. В дальнейшем процесс перейдёт под управление прогестерона._
### **Фаза секреции**
Это вторая фаза маточного цикла.
Под воздействием прогестерона в эндометрии увеличивается кровоток и начинается процесс секреции, то есть выработки питательных веществ (в основном гликогена), необходимых для развития эмбриона.
Прогестерон открывает период «окна имплантации» — время наибольшей готовности эндометрия к взаимодействию с эмбрионом. При продолжающемся воздействии прогестерона «окно имплантации» закрывается, клетки становятся более крупными и плотно расположенными, что затрудняет взаимодействие с эмбрионом.
В дальнейшем, при наступлении беременности, в эндометрии продолжится выработка питательных веществ и увеличение кровотока. При отсутствии беременности количество прогестерона пойдёт на убыль, кровоток будет снижаться, что приведет к началу менструального кровотечения. Цикл начинается заново.
_«Окно имплантации» обычно приходится на пятый–седьмой день после овуляции._
## Гормоны и контрацепция
Изменения в уровне гормонов гипофиза, яичниках и матке, происходящие в цикле, взаимосвязаны. Не существует «главных» и «неглавных», «важных» и «неважных» гормонов в его регуляции. Каждый выполняет свою функцию, без которой репродуктивная система работать не будет.

Однако гормоны гипофиза (ФСГ и ЛГ) имеют очень узкую специализацию и влияют практически только на яичники, в то время как гормоны яичника (эстрадиол и прогестерон) имеют влияние не только на матку, но и на весь организм: кожу, кости, сосуды, настроение, сон, аппетит и т. д.
Закономерности взаимодействия гипофиза, яичников и матки лежат в основе принципа работы гормональной контрацепции. Эти препараты при регулярном приёме поддерживают яичники (и матку соответственно) в состоянии как на второй–пятый день менструального цикла: овуляция не происходит, беременность не наступает.
Также понимание деталей событий менструального цикла важно для правильной интерпретации лабораторных показателей и УЗИ. Например, при оценке фертильности.
_Любите и берегите себя!_
1. Аменорея и олигоменорея : Клинические рекомендации. — 2021.
2. Аномальные маточные кровотечения : Клинические рекомендации. — 2021.
3. Гинекология : нац. рук. / под ред. Г. М. Савельевой, Г. Т. Сухих, В. Н. Серова, В. Е. Радзинского. — 2-е изд. — М. : ГЭОТАР-Медиа, 2018.
4. Серов, В. Н. Клинические рекомендации: Акушерство и гинекология / В. Н. Серов, Г. Т. Сухих. — 4-е изд. — М. : ГЭОТАР-Медиа, 2017.
5. Женское бесплодие: современные подходы к диагностике и лечению) : Федеральные клинические рекомендации (протокол лечения). — 2021.
6. ACOG Clinical consensus General Approaches to Medical Management of Menstrual Suppression. — 2022.
7. B. Gellersen, J. J. Brosens. Cyclic Decidualization of the Human Endometrium in Reproductive Health and Failure // Endocrine Reviews. — Vol. 35\. — Issue 6 (1 December 2014). — Pp. 851–905\. — URL: https://doi.org/10.1210/er.2014-1045
8. ESHRE Guideline. PSOS / European Society of Human Reproduction and Embryology. — 2018.
9. H. N. Jabbour et al. Endocrine Regulation of Menstruation // Endocrine Reviews. — Vol. 27\. — Issue 1 (1 February 2006). — Pp. 17–46\. — URL: https://doi.org/10.1210/er.2004-0021
10. J. Anne, S. Richardset al. Ovarian Follicular Theca Cell Recruitment, Differentiation, and Impact on Fertility: 2017 Update // _Endocrine Reviews. —_ Vol. 39\. — Issue 1 (February 2018). — Pp. 1–20\. — URL: https://doi.org/10.1210/er.2017-00164
Мнение автора может не совпадать с мнением редакции
При написании скриптов зачастую встаёт задача сделать однотипное действие много раз.
Например, вывести товары из списка один за другим. Или просто перебрать все числа от `1` до `10` и для каждого выполнить одинаковый код.
Для многократного повторения одного участка кода предусмотрены _циклы_.
Небольшое объявление для продвинутых читателей.
В этой статье рассматриваются только базовые циклы: `while`, `do..while` и `for(..;..;..)`.
Если вы пришли к этой статье в поисках других типов циклов, вот указатели:
* См. for…in для перебора свойств объекта.
* См. for…of и Перебираемые объекты для перебора массивов и перебираемых объектов.
В противном случае, продолжайте читать.
## Цикл «while»
Цикл `while` имеет следующий синтаксис:
while (condition) {
// код
// также называемый "телом цикла"
}
Код из тела цикла выполняется, пока условие `condition` истинно.
Например, цикл ниже выводит `i`, пока `i < 3`:
let i = 0;
while (i < 3) { // выводит 0, затем 1, затем 2
alert( i );
i++;
}
Одно выполнение тела цикла по-научному называется _итерация_. Цикл в примере выше совершает три итерации.
Если бы строка `i++` отсутствовала в примере выше, то цикл бы повторялся (в теории) вечно. На практике, конечно, браузер не позволит такому случиться, он предоставит пользователю возможность остановить «подвисший» скрипт, а JavaScript на стороне сервера придётся «убить» процесс.
Любое выражение или переменная может быть условием цикла, а не только сравнение: условие `while` вычисляется и преобразуется в логическое значение.
Например, `while (i)` – более краткий вариант `while (i != 0)`:
let i = 3;
while (i) { // когда i будет равно 0, условие станет ложным, и цикл остановится
alert( i );
i–;
}
Фигурные скобки не требуются для тела цикла из одной строки
let i = 3;
while (i) alert(i–);
## Цикл «do…while»
Проверку условия можно разместить под телом цикла, используя специальный синтаксис `do..while`:
do {
// тело цикла
} while (condition);
Цикл сначала выполнит тело, а затем проверит условие `condition`, и пока его значение равно `true`, он будет выполняться снова и снова.
let i = 0;
do {
alert( i );
i++;
} while (i < 3);
## Цикл «for»
Более сложный, но при этом самый распространённый цикл — цикл `for`.
Выглядит он так:
for (начало; условие; шаг) {
// … тело цикла …
}
Давайте разберёмся, что означает каждая часть, на примере. Цикл ниже выполняет `alert(i)` для `i` от `0` до (но не включая) `3`:
for (let i = 0; i < 3; i++) { // выведет 0, затем 1, затем 2
alert(i);
}
Рассмотрим конструкцию `for` подробней:
| часть | | |
| ------- | --------- | ----------------------------------------------------------------------------------------- |
| начало | let i = 0 | Выполняется один раз при входе в цикл |
| условие | i < 3 | Проверяется _перед_ каждой итерацией цикла.Если оно вычислится в false, цикл остановится. |
| тело | alert(i) | Выполняется снова и снова, пока условие вычисляется в true. |
| шаг | i++ | Выполняется _после_ тела цикла на каждой итерации _перед_ проверкой условия. |
В целом, алгоритм работы цикла выглядит следующим образом:
Выполнить начало
→ (Если условие == true → Выполнить тело, Выполнить шаг)
→ (Если условие == true → Выполнить тело, Выполнить шаг)
→ (Если условие == true → Выполнить тело, Выполнить шаг)
→ …
То есть, `начало` выполняется один раз, а затем каждая итерация заключается в проверке `условия`, после которой выполняется `тело` и `шаг`.
Если тема циклов для вас нова, может быть полезным вернуться к примеру выше и воспроизвести его работу на листе бумаги, шаг за шагом.
Вот в точности то, что происходит в нашем случае:
// for (let i = 0; i < 3; i++) alert(i)
// Выполнить начало
let i = 0;
// Если условие == true → Выполнить тело, Выполнить шаг
if (i < 3) { alert(i); i++ }
// Если условие == true → Выполнить тело, Выполнить шаг
if (i < 3) { alert(i); i++ }
// Если условие == true → Выполнить тело, Выполнить шаг
if (i < 3) { alert(i); i++ }
// …конец, потому что теперь i == 3
Встроенное объявление переменной
В примере переменная счётчика `i` была объявлена прямо в цикле. Это так называемое «встроенное» объявление переменной. Такие переменные существуют только внутри цикла.
for (let i = 0; i < 3; i++) {
alert(i); // 0, 1, 2
}
alert(i); // ошибка, нет такой переменной
Вместо объявления новой переменной мы можем использовать уже существующую:
let i = 0;
for (i = 0; i < 3; i++) { // используем существующую переменную
alert(i); // 0, 1, 2
}
alert(i); // 3, переменная доступна, т.к. была объявлена снаружи цикла
### Пропуск частей «for»
Любая часть `for` может быть пропущена.
Для примера, мы можем пропустить `начало` если нам ничего не нужно делать перед стартом цикла.
let i = 0; // мы уже имеем объявленную i с присвоенным значением
for (; i < 3; i++) { // нет необходимости в "начале"
alert( i ); // 0, 1, 2
}
Можно убрать и `шаг`:
let i = 0;
for (; i < 3;) {
alert( i++ );
}
Это сделает цикл аналогичным `while (i < 3)`.
А можно и вообще убрать всё, получив бесконечный цикл:
for (;;) {
// будет выполняться вечно
}
При этом сами точки с запятой `;` обязательно должны присутствовать, иначе будет ошибка синтаксиса.
## Прерывание цикла
Обычно цикл завершается при вычислении _условия_ в `false`.
Но мы можем выйти из цикла в любой момент с помощью специальной директивы `break`.
Например, следующий код подсчитывает сумму вводимых чисел до тех пор, пока посетитель их вводит, а затем – выдаёт:
let sum = 0;
while (true) {
let value = +prompt("Введите число", ”);
if (!value) break; // (*)
sum += value;
}
alert( ‘Сумма: ‘ + sum );
Директива `break` в строке `(*)` полностью прекращает выполнение цикла и передаёт управление на строку за его телом, то есть на `alert`.
Вообще, сочетание «бесконечный цикл + `break`» – отличная штука для тех ситуаций, когда условие, по которому нужно прерваться, находится не в начале или конце цикла, а посередине или даже в нескольких местах его тела.
## Переход к следующей итерации
Директива `continue` – «облегчённая версия» `break`. При её выполнении цикл не прерывается, а переходит к следующей итерации (если условие все ещё равно `true`).
Её используют, если понятно, что на текущем повторе цикла делать больше нечего.
Например, цикл ниже использует `continue`, чтобы выводить только нечётные значения:
for (let i = 0; i < 10; i++) {
// если true, пропустить оставшуюся часть тела цикла
if (i % 2 == 0) continue;
alert(i); // 1, затем 3, 5, 7, 9
}
Для чётных значений `i`, директива `continue` прекращает выполнение тела цикла и передаёт управление на следующую итерацию `for` (со следующим числом). Таким образом `alert` вызывается только для нечётных значений.
Директива `continue` позволяет избегать вложенности
Цикл, который обрабатывает только нечётные значения, мог бы выглядеть так:
for (let i = 0; i < 10; i++) {
if (i % 2) {
alert( i );
}
}
С технической точки зрения он полностью идентичен. Действительно, вместо `continue` можно просто завернуть действия в блок `if`.
Однако мы получили дополнительный уровень вложенности фигурных скобок. Если код внутри `if` более длинный, то это ухудшает читаемость, в отличие от варианта с `continue`.
Нельзя использовать `break/continue` справа от оператора „?“
Обратите внимание, что эти синтаксические конструкции не являются выражениями и не могут быть использованы с тернарным оператором `?`. В частности, использование таких директив, как `break/continue`, вызовет ошибку.
Например, если мы возьмём этот код:
if (i > 5) {
alert(i);
} else {
continue;
}
(i > 5) ? alert(i) : continue; // continue здесь приведёт к ошибке
Это ещё один повод не использовать оператор вопросительного знака `?` вместо `if`.
## Метки для break/continue
Бывает, нужно выйти одновременно из нескольких уровней цикла сразу.
Например, в коде ниже мы проходимся циклами по `i` и `j`, запрашивая с помощью `prompt` координаты `(i, j)` с `(0,0)` до `(2,2)`:
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
let input = prompt(`Значение на координатах (${i},${j})`, '');
// Что если мы захотим перейти к Готово (ниже) прямо отсюда?
}
}
alert(‘Готово!’);
Нам нужен способ остановить выполнение, если пользователь отменит ввод.
Обычный `break` после `input` лишь прервёт внутренний цикл, но этого недостаточно. Достичь желаемого поведения можно с помощью меток.
_Метка_ имеет вид идентификатора с двоеточием перед циклом:
labelName: for (…) {
…
}
Вызов `break <labelName>` в цикле ниже ищет ближайший внешний цикл с такой меткой и переходит в его конец.
outer: for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
let input = prompt(`Значение на координатах (${i},${j})`, '');
// если пустая строка или Отмена, то выйти из обоих циклов
if (!input) break outer; // (*)
// сделать что-нибудь со значениями...
}
}
alert(‘Готово!’);
В примере выше это означает, что вызовом `break outer` будет разорван внешний цикл до метки с именем `outer`.
Таким образом управление перейдёт со строки, помеченной `(*)`, к `alert('Готово!')`.
Можно размещать метку на отдельной строке:
outer:
for (let i = 0; i < 3; i++) { … }
Директива `continue` также может быть использована с меткой. В этом случае управление перейдёт на следующую итерацию цикла с меткой.
Метки не позволяют «прыгнуть» куда угодно
Метки не дают возможности передавать управление в произвольное место кода.
Например, нет возможности сделать следующее:
break label; // не прыгает к метке ниже
label: for (…)
Директива `break` должна находиться внутри блока кода. Технически, подойдет любой маркированный блок кода, например:
label: {
// …
break label; // работает
// …
}
К слову, `continue` возможно только внутри цикла.
## Итого
Мы рассмотрели 3 вида циклов:
* `while` – Проверяет условие перед каждой итерацией.
* `do..while` – Проверяет условие после каждой итерации.
* `for (;;)` – Проверяет условие перед каждой итерацией, есть возможность задать дополнительные настройки.
Чтобы организовать бесконечный цикл, используют конструкцию `while (true)`. При этом он, как и любой другой цикл, может быть прерван директивой `break`.
Если на данной итерации цикла делать больше ничего не надо, но полностью прекращать цикл не следует – используют директиву `continue`.
Обе этих директивы поддерживают _метки_, которые ставятся перед циклом. Метки – единственный способ для `break/continue` выйти за пределы текущего цикла, повлиять на выполнение внешнего.
Заметим, что метки не позволяют прыгнуть в произвольное место кода, в JavaScript нет такой возможности.
****
**Что это такое?** Циклы в Python – инструменты, упрощающие работу с кодом. В программировании все циклично и последовательно. Написание любой программы состоит из прохождения определенных этапов, задачи в которых могут повторяться. Вот чтобы не тратить время на повторяющиеся элементы и были придуманы циклы. К слову, они есть в любом языке программирования, не только в Python.
****
**Какие бывают?** В Python основных циклов всего два – «while» и «for». Первый используется тогда, когда заранее известно количество итераций, а второй – когда нужно выполнить перебор элементов. Но мало знать принципы работы циклов, в работе необходимы еще и операторы, которые делают «while» и «for» бесконечными или вложенными, прерывают их или меняют. Ниже в статье постарались объяснить все это доступным языком с примерами.
**В статье рассказывается:**
1. Что такое циклы в языке программирования Python
2. Зачем нужны циклы в Python
3. 2 цикла в Python
4. Примеры циклов в Python
5. Выход из цикла Python или его смена
6. Бесконечные и вложенные циклы в Python
7. 
Пройди тест и узнай, какая сфера тебе подходит:
айти, дизайн или маркетинг.
Бесплатно от Geekbrains
Цикличные задачи имеют место даже в повседневной жизни. Например, различные списки продуктов, целей на день, назначенных встреч и т. д. Приходя в супермаркет, человек ориентируется на список, покупая все товары, которые в нем указаны.

Простейший пример цикла «если»: если дома закончился хлеб, то его нужно купить в магазине. Если цикл не выполняется, то сделать бутерброд дома не получится
В сфере программирования циклы дают возможность осуществлять повтор тех или иных действий в зависимости от соблюдения имеющегося условия. Тем самым обеспечивается выполнение многократной последовательности инструкции.
В рамках данной темы можно выделить ряд базовых понятий:
* Единоразовое выполнение — так называемая итерация.
* Тело цикла — последовательность кода, которую можно исполнить многократно.

Топ-30 самых востребованных и высокооплачиваемых профессий 2023
Поможет разобраться в актуальной ситуации на рынке труда

Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка
Только проверенные нейросети с доступом из России и свободным использованием

ТОП-100 площадок для поиска работы от GeekBrains
Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽
Уже скачали 26918 
Используя , вы можете создавать вложенные циклы. В этом случае программа произведет запуск внешнего цикла и в первой его итерации перейдет во вложенный. После этого она вновь вернётся к началу внешнего и опять запустит внутренний. Эти действия будут выполняться вплоть до момента, когда последовательность не завершится или не прервется. Циклы очень полезны для выполнения задач, связанных с перебором определенного количества элементов в заданном списке.
## Зачем нужны циклы в Python
Циклы в Python позволяют сделать из сложных задач более простые. С помощью них вы можете настроить поток программы так, чтобы код повторялся определенное количество раз. Иными словами, вам не придется постоянно прописывать один и тот же код. Допустим, что перед вами стоит задача вывода первых 20 натуральных чисел. Вы, конечно, можете применить оператор «print» 20 раз, но гораздо более удобный вариант — вывести их внутри цикла, который выполняет до 20 итераций.


Применительно к Python можно выделить следующие плюсы использования циклов:
1. Возможность перебора элементов структур данных (массивов или связанных списков).
2. Возможность многократного использования кода.
3. Отсутствие необходимости прописывать один и то же код несколько раз.
Эти преимущества циклов присущи и другим языкам.
## Цикла в Python
Теперь стоит понять, какие циклы существуют в Python. Выделяют две разновидности: «for» и «while». «For» чаще всего применяется в ситуациях, когда необходимо разработать программу, состоящую из множества уровней при наличии большого количества условий.
| Оператор цикла | Описание |
| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| «For» | Данный цикл применяется в том случае, если нужно выполнять тот или иной фрагмент вплоть до момента, когда будет исполнено заданное условие. Цикл «for», который иногда называют циклом с предусловием, рекомендуется применять в тех ситуациях, когда вы заранее знаете численность итераций. |
| «While» | Этот цикл применяется в тех случаях, когда численность итераций заранее не известна. Блок операторов выполняется до тех пор, пока не будет выполнено условие, указанное в цикле. У него есть альтернативное название — цикл с предварительной проверкой условия. |
| «do-while» | Он продолжается вплоть до момента, когда будет выполнено заданное условие. Альтернативное название — цикл с постусловием в Python. Применяется в ситуациях, при которых стоит задача как минимум однократного выполнения цикла. |
## Примеры циклов в Python
### Цикл «for»
Данный цикл в языке Python осуществляет поворотное выполнение сформированного кода на основе переменной или счетчика. Он применяется, только если нужно перебрать элементы заранее известное количество раз. Допустим, что у вас есть список. Сначала из него будет взят первый элемент, затем второй и т. д. При этом с каждым из этих элементов будет выполняться действие, заранее предписанное в теле «for». Приведем пример цикла в Python:
Дарим скидку от 60%
на обучение «Веб-разработчик» до 17 марта
Уже через 9 месяцев сможете устроиться на работу с доходом **от 150 000 рублей**


«For» может также включать в себя различные виды данных: цифры, слова и т. д. К примеру:
for i in 21, 25, ‘один’, ‘два’:
После того как будет произведен запуск, на экране отобразится следующее:
Только до 14.03
 ТОП-100 площадок для поиска работы от GeekBrains
 20 профессий 2023 года, с доходом от 150 000 рублей
 Чек-лист «Как успешно пройти собеседование»
Чтобы получить файл, укажите e-mail:
Введите e-mail, чтобы получить доступ к документам
Подтвердите, что вы не робот,
указав номер телефона:
Введите телефон, чтобы получить доступ к документам
 Уже скачали 52300
Функция «range()» позволяет упростить работу. Она демонстрирует нужное число повторов последовательности. Тем самым данная функция цикла для Python конкретизирует элементы из списка «for», которые вам нужны в данный момент. В скобках вы увидите от 1 до 3 чисел:
* 1 число говорит, что следует осуществить проверку всех чисел от 0 и до него;
* 2 числа свидетельствуют о необходимости проверить все числа, которые располагаются между первым и вторым;
* 3 числа создадут список от первого до второго с шагом, который будет равен третьему.
Вы, конечно, можете написать код следующим образом:
Однако это создаст излишние сложности. Это будет проблематично тогда, когда имеет место внушительное количество чисел. Следовательно, имеет смысл применить вышеназванный «range()»:
for i in range(21,25):
При любом из этих вариантов вы увидите на экране следующую последовательность:
### Цикл «while»
Англоязычное слово «while» можно перевести как «до тех пор, как». Данный цикл является довольно универсальным. Он может слегка напоминать условие «if». При этом код «while» выполняется неоднократно. Написание его условия осуществляется до тела цикла. Вслед за первым выполнением программа перемещается обратно к заголовку и опять повторяет те же операции.
В конечном итоге последовательность завершается в том случае, если условие цикла уже не может быть выполнено. Проще говоря, когда оно перестаёт быть истинным. Отличие этого цикла от «for» заключается в том, что разработчик не имеет информации о численности проверок.

While переводится как «пока». Продолжим простейший пример цикла про хлеб: пока в доме не появится хлеб, не сделать бутерброд. Чтобы сделать бутерброд, сходите в магазин
Образец цикла «while» в Python:
Рассмотрим вариант применения:
count = 0
while count < 6:
count += 2
В этом случае переменной даётся значение 0\. Далее начинается цикл, повторяемое условие которого число меньше 6\. Тело цикла, как вы можете видеть, тоже включает в себя две инструкции, каждая из которых выполняет определенную задачу. Первая нужна, чтобы отобразить число на экране, а вторая — чтобы увеличить его значение на два. В итоге повторение цикла производится вплоть до момента, когда условие перестает быть истинным. На экране вы сможете увидеть такую последовательность чисел:
После тела цикла можно вписать «else» и блок операций, которые следует осуществить после завершения «while».
Как правило, она имеет смысл лишь в том случае, когда указана «break». Однако программа функционирует вне зависимости от отсутствия или наличия последней. Рассмотрим код:
count = 3
while count < 7:
print count, » меньше 7″
count = count + 1
print count, » не меньше 7″
Переменной присвоили значение 3\. Условие следующее: пока она меньше 7, следует выводить как ее, так и само выражение «меньше 7», после чего прибавлять к ней 1\. Если она будет равной 7, то начнёт выполняться условие «else». В таком случае вы увидите на экране, что переменная не меньше 7\. Итогом выполнения кода будет следующая запись:
3 меньше 7
4 меньше 7
5 меньше 7
6 меньше 7
7 не меньше 7
## Выход из цикла Python или его смена
Чтобы произвести выход из цикла в программировании на Python применяется оператор «break». Он осуществляет досрочное завершение, обходя «else». Для чего же это нужно? К примеру, при выполнении кода была выявлена ошибка, и, следовательно, последующая работа будет безрезультативной.
name = input(‘Введите имя:’)
if name == ‘хватит’:
Введите имя: Анатолий
Введите имя: Екатерина
Введите имя: хватит
Затем выполнение программы будет завершено.
Ещё одна инструкция, вносящая изменения в цикл, — «continue». При написании данного оператора внутри кода программа игнорирует все остальные инструкции до конца цикла. Далее начинается следующая итерация.
Но не стоит делать слишком большой акцент на применении подобных инструкций.
## Бесконечные и вложенные циклы в Python
### Бесконечные циклы
В этом случае не выполняется условие выхода. Скажем, цикл «while» является таковым в том случае, если его условие не может быть ложным. Он полезен, к примеру, для создания программы «Часы», беспрерывно демонстрирующей время.
В качестве примера рассмотрим следующий код:
Num = 4
while num < 6:
Как вы можете заметить, переменная всегда будет являться числом 4, так как не прописано ее повышение. По этой причине на экране будет отображаться лишь «Добрый день».
Во многих случаях цикл не должен быть бесконечным, так как это является одним из факторов нестабильности при работе программы. Для его завершения следует использовать комбинацию клавиш: «CTRL + C». Однако есть программы, которые вообще не подразумевают возможность выхода. К примеру, операционные системы, прошивки микроконтроллеров и т. д.


### Вложенные циклы
Речь пойдет о вложенных «for» и «while». Рассмотрим несколько вариантов применения таких циклов. Их на постоянной основе применяют в процессе обработки двухмерных списков.
Обратите внимание на пример создания двумерного списка и вывода его на экран посредством «print».
for i in range(2):
for j in range(3):
После использования одного «break» в Python произойдёт выход лишь из одного цикла. Ниже вы можете посмотреть на условие, которое позволяет выйти сразу из двух.
toExit = False
toExit = doSomething()
Это называется циклом в цикле. Причем они оба являются бесконечными. После того как функция «doSomething» вернет «True», выполнение кода прекратится. Затем друг за другом активируются «break» в каждом из циклов.

Если вовремя не остановить цикл командой break, то он будет выполняться бесконечно. У современных языков программирования есть защита от таких циклов ― при попытке их запуска они выдают ошибку
Чаще всего происходит последовательное выполнение команд. Как раз по этой причине, если нужно выполнить тело кода не один раз, применяются рассмотренные выше методы.
Теперь вы знаете, как работают циклы в Python. С их помощью вы сможете упростить повторение, а также сделать его более логичным.
У этого термина существуют и другие значения, см. Цикл.
**Цикл** — разновидность управляющей конструкции в высокоуровневых языках программирования, предназначенная для организации многократного исполнения набора инструкций. Также циклом может называться любая многократно исполняемая последовательность инструкций, организованная любым способом (например, с помощью условного перехода).

Пример цикла While.
Последовательность инструкций, предназначенная для многократного исполнения, называется _телом цикла_. Единичное выполнение тела цикла называется итерацией. Выражение, определяющее, будет в очередной раз выполняться итерация или цикл завершится, называется _условием выхода_ или _условием окончания цикла_ (либо _условием продолжения_ в зависимости от того, как интерпретируется его истинность — как признак необходимости завершения или продолжения цикла). Переменная, хранящая текущий номер итерации, называется _счётчиком итераций_ цикла или просто _счётчиком цикла_. Цикл не обязательно содержит счётчик, счётчик не обязан быть один — условие выхода из цикла может зависеть от нескольких изменяемых в цикле переменных, а может определяться внешними условиями (например, наступлением определённого времени), в последнем случае счётчик может вообще не понадобиться.
Исполнение любого цикла включает первоначальную инициализацию переменных цикла, проверку условия выхода, исполнение тела цикла и обновление переменной цикла на каждой итерации. Кроме того, большинство языков программирования предоставляет средства для досрочного управления циклом, например, операторы завершения цикла, то есть выхода из цикла независимо от истинности условия выхода (в языке Си — `break`) и операторы пропуска итерации (в языке Си — `continue`).