-
Notifications
You must be signed in to change notification settings - Fork 3
Краткий конспект по занятию №3
Часто, циклом именуют неоднократно повторяющийся блок кода, выполнение которого связано с каким-либо условием.
Для того, чтобы реализовать простейший цикл в своем коде - воспользуемся оператором 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
, тем самым ты досрочно завершишь выполнение текущей программы.
Одним из главных преимуществ цикла 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")
.
С одной из команд управления циклами мы уже познакомились. Это команда 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
досрочное прерывание итерации цикла и перевод цикла на следующую итерацию.
Тем, кто хочет достичь максимального контроля можно воспользоваться следующей модификацией оператор цикла 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)
Токность №1 Если даже цикл невыполнится ни разу - блок else у while - else
будет выполнен все равно.
Рассмотрим пример:
while False:
print("Hmmm")
else:
print("BPS here")
После выполнения видим:
BPS here
Тонкость №2
Оператор while
в основном используется для создания бесконечных циклов и управляется с помощью команд continue
и break
.
Тонкость №3 Вообще говоря, while
не единственный цикл в Python :). Время его исполнения гораздо больше, чем у его соперника --- цикла for
.