Skip to content

Краткий конспект по занятию №3

Evgeny Vlasov edited this page Oct 17, 2019 · 2 revisions

Занятие 3.

Циклы.

1. Цикл - это ...

Часто, циклом именуют неоднократно повторяющийся блок кода, выполнение которого связано с каким-либо условием.

Для того, чтобы реализовать простейший цикл в своем коде - воспользуемся оператором while, который выполняет вверенные ему блоки кода до тех пор, пока верно некое условие.

2. Сигнатура цикла while

Сигнатура оператора цикла while во многом схожа с конструкцией условного оператора if. Если оператор ветвления выглядит так:

if logic_expression:
    body
    ....

То оператор while имеет вид:

while logic_expression:
    body
    ....

Обратим внимание: body (тело), внутри оператора while часто именуют телом цикла.

Поскольку цикл выполняет тело по нескольку раз - каждый шаг выполнения цикла называют итерацией.

Пример: рассмотрим простейший пример. Создадим цикл, который будет печатать в консоль все числа от 0 до 10 (включительно).

Рассмотрим код, а затем дадим ему пояснения:

i = 0 # 1
while i <= 10: # 2
    print(i) # 3
    i = i + 1 # 4
  • 1 --- инициализация переменной цикла. В дальнейшем, логическое условие цикла while будет ориентироваться на эту переменную.

  • 2 --- оператор while и логическое условие i <= 10. Это значит, что пока данное условие истинно, цикл будет продолжаться. Как только условие i <= 10 будет нарушено - цикл завершит свое выполнение. : - ВАЖНЕЙШАЯ часть цикла - отделяется тело цикла от логического выражения.

  • 3 --- тело цикла (основной блок).

  • 4 --- тело цикла (блок изменения переменной цикла).

Замечание конструкцию вида i = i + 1 часто называют переприсваиванием. К старому значению переменной i прибавляется единица, и полученное значение теперь присваивается переменной i. Это можно записывать и короче:

i = i + 1 
i += 1

Точно так же для всех остальных арифметических операций:

i = i - 1
i -= 1

i = i * 2
i *= 2

i = i / 3
i /= 3

....

Проведи эксперимент: попробуй поэксперементировать со строками 2 и 4.Например, измени условие на i < 100 и обрати внимание на то, какое число будет выведено последним. Или ты можешь вовсе убрать строку 4 : тем самым получишь так называемый бесконечный цикл. Не переживай, BPS не даст твоему компухтеру переполнить RAM. Как только тебе надоест выоплнение бесконечного цикла, нажми комбинацию клавиш Ctrl + Z или Ctrl + C , тем самым ты досрочно завершишь выполнение текущей программы.

3. While VS User

Одним из главных преимуществ цикла while над пользователем является то, что он никогда не устанет, не захочет есть или пить или спать, а будет выполняться вечно (или до тех пор, пока не нарушено логическое условие).

Давайте рассмотрим типичную задачу. Мы будем просить пользователя ввести приемлимый день своего рождения (именно число, без месяца и года). Как мы знаем, на календаре во всех без исключениях месяцах, числа начинаются от 1 до 31 включительно (правая граница у нас максимизирована для наиболее долгих месяцев. BPS искренне извиняется перед февралем.)

Код такой программы:

while True:
    day = int(input("Enter your day: "))
    if day >= 1 and day <= 31:
        ВЫХОДИ ИЗ ЦИКЛА
print("WOW!")

После выполнения данного кода, ожидаемо получаем :

  File "loop.py", line 4
    ВЫХОДИ ИЗ ЦИКЛА
            ^
SyntaxError: invalid syntax

Хм, но как же с неизменным логическим условием (у нас всегда будет True ) досрочно завершать выполнение тела цикла и переходите к следующей за циклом команде?

Ключевой командой досрочного завершения тела цикла и выхода из него - является слово break.

Посмотрим, что случится:

while True:
    day = int(input("Enter your day: "))
    if day >= 1 and day <= 31:
        break
print("WOW")

Выполним код:

Enter your day: -1
Enter your day: -2
Enter your day: 34
Enter your day: 45
Enter your day: 12
WOW

Обрати внимание в какой момент происходит выход из цикла и переход к следующей за циклом команде print("WOW").

4. Команды управления циклами

С одной из команд управления циклами мы уже познакомились. Это команда break, суть которой заключается в том, что по достижению данной команды цикл досрочно завершает выполнения текущей итерации и переходит к следующей за циклом команде.

Теперь рассмотрим следующий пример: Пользователь вводит с консоли возраст. Если возраст - число четное, сообщаем об этом пользователю (например, напишем ЧЁТКИЙ ВОЗРАСТ), если нечётное - не пишем ничего. Если возраст - отрицательный - выходим из цикла.

while Truе:
    age = int( input("Enter your age: ") )
    if age % 2 != 0:
        continue
    elif age % 2 == 0:
        print("ЧЁТКИЙ ВОЗРАСТ")
    elif age < 0:
        break
    else:
        continue

Итак, здесь мы видим странное слово continue - что же оно делает? Если ты поэксперементируешь с кодом, то быстр поймешь, что команда coninue переводит цикл на следующую итерацию. В этом ее предназначение.

Кратое резюме:

  • break досрочное прерывание итерации цикла и выход из цикла (полное прерывание)
  • coninue досрочное прерывание итерации цикла и перевод цикла на следующую итерацию.

5. Очень редкий while

Тем, кто хочет достичь максимального контроля можно воспользоваться следующей модификацией оператор цикла while - это оператор while - else. Суть которого в том, что после завершения цикла (после становления ложным логического условия), будет выполнено определенное действие:

i = 0
while i < 10: 
    i += 2
    print("In while loop with i", i)
else:
    print("In else part with i", i)

6. Некоторые тонкости BPS

Токность №1 Если даже цикл невыполнится ни разу - блок else у while - else будет выполнен все равно.

Рассмотрим пример:

while False:
    print("Hmmm")
else:
    print("BPS here")

После выполнения видим:

BPS here

Тонкость №2 Оператор while в основном используется для создания бесконечных циклов и управляется с помощью команд continue и break.

Тонкость №3 Вообще говоря, while не единственный цикл в Python :). Время его исполнения гораздо больше, чем у его соперника --- цикла for.