> For the complete documentation index, see [llms.txt](https://exceedteam.gitbook.io/python-and-back-end/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://exceedteam.gitbook.io/python-and-back-end/python-language/osnovy/potok-komand-if-elif-while-i-t.d..md).

# Поток команд (if, elif, while и т.д.)

### Оператор if

Оператор `if` используется для проверки условий: *если* условие верно, выполняется блок выражений (называемый “if-блок”), *иначе* выполняется другой блок выражений (называемый “else-блок”). Блок “else” является необязательным.

**Пример:** (сохраните как `if.py`)

```python
number = 23
guess = int(input('Введите целое число : '))

if guess == number:
    print('Поздравляю, вы угадали,') # Здесь начинается новый блок
    print('(хотя и не выиграли никакого приза!)') # Здесь заканчивается новый блок
elif guess < number:
    print('Нет, загаданное число немного больше этого.') # Ещё один блок
    # Внутри блока вы можете выполнять всё, что угодно ...
else:
    print('Нет, загаданное число немного меньше этого.')
    # чтобы попасть сюда, guess должно быть больше, чем number

print('Завершено')
# Это последнее выражение выполняется всегда после выполнения оператора if
```

**Вывод:**

```python
$ python if.py
Введите целое число : 50
Нет, загаданное число немного меньше этого.
Завершено

$ python if.py
Введите целое число : 22
Нет, загаданное число немного больше этого.
Завершено

$ python if.py
Введите целое число : 23
Поздравляю, вы угадали,
(хотя и не выиграли никакого приза!)
Завершено
```

**Как это работает:**

> В этой программе мы принимаем варианты от пользователя и проверяем, совпадают ли они с заранее заданным числом. Мы устанавливаем переменной `number` значение любого целого числа, какого хотим. Например, `23`. После этого мы принимаем вариант числа от пользователя при помощи функции `input()`. Функции – это всего-навсего многократно используемые фрагменты программы.
>
> Мы передаём встроенной функции `input` строку, которую она выводит на экран и ожидает ввода от пользователя. Как только мы ввели что-нибудь и нажали клавишу `Enter`, функция `input()` возвращает строку, которую мы ввели. Затем мы преобразуем полученную строку в число при помощи `int()`, и сохраняем это значение в переменную `guess`. Вообще-то, `int` – это класс, но на данном этапе вам достаточно знать лишь, что при помощи него можно преобразовать строку в целое число (предполагая, что строка содержит целое число).
>
> Далее мы сравниваем число, введённое пользователем, с числом, которое мы выбрали заранее. Если они равны, мы печатаем сообщение об успехе. Обратите внимание, что мы используем соответствующие уровни отступа, чтобы указать Python, какие выражения относятся к какому блоку. Вот почему отступы так важны в Python. Я надеюсь, вы придерживаетесь правила “постоянных отступов”, не так ли?
>
> Обратите внимание, что в конце оператора `if` стоит двоеточие – этим мы показываем, что далее следует блок выражений.
>
> После этого мы проверяем, верно ли, что пользовательский вариант числа меньше загаданного, и если это так, мы информируем пользователя о том, что ему следует выбирать числа немного больше этого. Здесь мы использовали выражение `elif`, которое попросту объединяет в себе два связанных `if else-if else` выражения в одно выражение `if-elif-else`. Это облегчает чтение программы, а также не требует дополнительных отступов.
>
> Выражения `elif` и `else` также имеют двоеточие в конце логической строки, за которым следуют соответствующие блоки команд (с соответствующим числом отступов, конечно).
>
> Внутри if-блока оператора `if` может быть другой оператор `if` и так далее – это называется вложенным оператором `if`.
>
> Помните, что части `elif` и `else` не обязательны. Минимальная корректная запись оператора `if` такова:
>
> ```python
> if True:
>     print('Да, это верно.')
> ```
>
> После того, как Python заканчивает выполнение всего оператора `if` вместе с его частями `elif` и `else`, он переходит к следующему выражению в блоке, содержащем этот оператор `if`. В нашем случае это основной блок программы (в котором начинается выполнение программы), а следующее выражение – это `print('Завершено')`. После этого Python доходит до конца программы и просто выходит из неё.

### Оператор while

Оператор `while` позволяет многократно выполнять блок команд до тех пор, пока выполняется некоторое условие. Это один из так называемых *операторов цикла*. Он также может иметь необязательный пункт `else`.

**Пример:** (сохраните как `while.py`)

```python
number = 23
running = True

while running:
    guess = int(input('Введите целое число : '))

    if guess == number:
        print('Поздравляю, вы угадали.')
        running = False # это останавливает цикл while
    elif guess < number:
        print('Нет, загаданное число немного больше этого.')
    else:
        print('Нет, загаданное число немного меньше этого.')
else:
    print('Цикл while закончен.')
    # Здесь можете выполнить всё что вам ещё нужно

print('Завершение.')
```

**Вывод:**

```python
$ python while.py
Введите целое число : 50
Нет, загаданное число немного меньше этого.
Введите целое число : 22
Нет, загаданное число немного больше этого.
Введите целое число : 23
Поздравляю, вы угадали.
Цикл while закончен.
Завершение.
```

**Как это работает:**

> В этой программе мы продолжаем играть в игру с угадыванием, но преимущество состоит в том, что теперь пользователь может угадывать до тех пор, пока не угадает правильное число, и ему не придётся запускать программу заново для каждой попытки, как это происходило до сих пор. Это наглядно демонстрирует применение оператора `while`.
>
> Мы переместили операторы `input` и `if` внутрь цикла `while` и установили переменную `running` в значение `True` перед запуском цикла. Прежде всего проверяется, равно ли значение переменной `running` `True`, а затем происходит переход к соответствующему *while-блоку*. После выполнения этого блока команд условие, которым в данном случае является переменная `running`, проверяется снова. Если оно истинно, while-блок запускается снова, в противном случае происходит переход к дополнительному else-блоку, а затем – к следующему оператору.

Блок `else` выполняется тогда, когда условие цикла `while` становится ложным (`False`) – это может случиться даже при самой первой проверке условия. Если у цикла `while` имеется дополнительный блок `else`, он всегда выполняется, если только цикл не будет прерван оператором `break`.

`True` и `False` называются булевым типом данных, и вы можете считать их эквивалентными значениям `1` и `0` соответственно.

Примечание для программистов на C/C++&#x20;

Помните, что у цикла `while` может быть блок `else`.

### Цикл for

Оператор `for..in` также является оператором цикла, который осуществляет *итерацию* по последовательности объектов, т.е. проходит через каждый элемент в последовательности.

**Пример:** (сохраните как `for.py`)

```python
for i in range(1, 5):
    print(i)
else:
    print('Цикл for закончен')
```

**Вывод:**

```python
$ python for.py
1
2
3
4
Цикл for закончен
```

**Как это работает:**

> В этой программе мы выводим на экран *последовательность* чисел. Мы генерируем эту последовательность, используя встроенную функцию `range`.
>
> Мы задаём два числа, и `range` возвращает последовательность чисел от первого числа до второго. Например, `range(1,5)` даёт последовательность `[1, 2, 3, 4]`. По умолчанию `range` принимает значение шага, равное 1. Если мы зададим также и третье число `range`, оно будет служить шагом. Например, `range(1,5,2)` даст `[1,3]`. Помните, интервал простирается только *до* второго числа, т.е. **не** включает его в себя.
>
> Обратите внимание, что `range()` генерирует последовательность чисел, но только по одному числу за раз – когда оператор for запрашивает следующий элемент. Чтобы увидеть всю последовательность чисел сразу, используйте `list(range())`.&#x20;
>
> Затем цикл `for` осуществляет итерацию по этому диапазону - `for i in range(1,5)` эквивалентно `for i in [1, 2, 3, 4]`, что напоминает присваивание переменной i по одному числу (или объекту) за раз, выполняя блок команд для каждого значения `i`. В данном случае в блоке команд мы просто выводим значение на экран.

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

Помните также, что цикл `for..in` работает для любой последовательности. В нашем случае это список чисел, сгенерированный встроенной функцией `range`, но в общем случае можно использовать любую последовательность любых объектов!&#x20;

### Оператор break

Оператор `break` служит для *прерывания* цикла, т.е. остановки выполнения команд даже если условие выполнения цикла ещё не приняло значения `False` или последовательность элементов не закончилась.

Важно отметить, что если циклы `for` или `while` прервать оператором *break*, соответствующие им блоки `else` выполняться **не** будут.

**Пример:** (сохраните как `break.py`)

```python
while True:
    s = input('Введите что-нибудь : ')
    if s == 'выход':
        break
    print('Длина строки:', len(s))
print('Завершение')
```

**Вывод:**

```python
$ python break.py
Введите что-нибудь : Программировать весело.
Длина строки: 23
Введите что-нибудь : Если работа скучна,
Длина строки: 19
Введите что-нибудь : Чтобы придать ей весёлый тон -
Длина строки: 30
Введите что-нибудь :       используй Python!
Длина строки: 23
Введите что-нибудь : выход
Завершение
```

**Как это работает:**

> В этой программе мы многократно считываем пользовательский ввод и выводим на экран длину каждой введённой строки. Для остановки программы мы вводим специальное условие, проверяющее, совпадает ли пользовательский ввод со строкой `'выход'`. Мы останавливаем программу *прерыванием* цикла оператором `break` и достигаем её конца.
>
> Длина введённой строки может быть найдена при помощи встроенной функции `len`.
>
> Помните также, что оператор `break` может применяться и в цикле `for`.

### Оператор continue

Оператор `continue` используется для указания Python, что необходимо пропустить все оставшиеся команды в текущем блоке цикла и *продолжить* со следующей итерации цикла.

**Пример:** (сохраните как `continue.py`)

```python
while True:
    s = input('Введите что-нибудь : ')
    if s == 'выход':
        break
    if len(s) < 3:
        print('Слишком мало')
        continue
    print('Введённая строка достаточной длины')
    # Разные другие действия здесь...
```

**Вывод:**

```python
$ python continue.py
Введите что-нибудь : a
Слишком мало
Введите что-нибудь : 12
Слишком мало
Введите что-нибудь : абв
Введённая строка достаточной длины
Введите что-нибудь : выход
```

**Как это работает:**

> В этой программе мы запрашиваем ввод со стороны пользователя, но обрабатываем введённую строку только если она имеет длину хотя бы в 3 символа. Итак, мы используем встроенную функцию `len` для получения длины строки, и если длина менее 3, мы пропускаем остальные действия в блоке при помощи оператора `continue`. В противном случае все остальные команды в цикле выполняются, производя любые манипуляции, которые нам нужны.
>
> Заметьте, что оператор `continue` также работает и с циклом `for`.
