While-loop in Python
Цикл while позволяет повторять блок инструкций, пока заданное выражение истинно.
while condition:
# инструкции, выполняющиеся при истинности условия
pass
else:
# инструкции, выполняющиеся в случае, если выполнение while не было прервано
pass
Не стоит забывать менять значения, которые вычисляются в condition
, иначе выполнение цикла никогда не прекратиться. Такие циклы называются бесконечными.
Иногда нам необходимо постоянно выполнять определенные действия, например, когда мы ожидаем команды на выполнение чего-либо. В таком случае, бесконечный цикл задается умышленно.
while True:
pass
while 1:
pass
Для Python более естественным является вариант с True, однако применяются оба варианта.
В Python существует неспецифичный для циклов в других операторах программирования блок else
, который будет выполнен, если в процессе работы цикла из него не произошло принудительного выхода оператором break (о котором чуть позже).
Оператор else
в том числе нужен для избегания boiler-plate кода.
For-loop
Понятие протокола итерирования
В Python важнейшим понятием для циклических операторов является понятие протокола итерирования.
Протокол итерирования подразумевает наличие двух объектов: итерируемого объекта и итератора.
Итерируемый объект — объект, который содержит коллекцию, по которой мы будем итерироваться.
Итератор — объект, который осуществляет обход коллекции итерируемого объекта.
Цикл for
в Python
Цикл for
позволяет обойти все элементы итерируемого объекта и выполнить заданные команд задан для каждого из них.
for element in iterable:
# инструкции, выполняемые для каждого элемента итерируемого объекта
pass
else:
# инструкции, выполняющиеся в случае, если выполнение for не было прервано
pass
На каждой итерации в переменную element
будет помещен очередной член итерируемого объекта iterable
и выполнен блок команд.
В Python также как и для while
существует блок else
, который выполняется если выполнение for-loop не было прервано.
Операторы break и continue
continue
— позволяет пропустить все инструкции, следующие за ним, и вернуться к проверке условия в случае цикла while
или к следующему элементу, в случае цикла for
.
break
— прерывает выполнения цикла и переходит к инструкциям, следующим за циклам.
Code Snippets
# Простейший цикл while.
i = 5
while i > 0:
i -= 1
print(i)
4 3 2 1 0
# Бесконечный цикл.
while True:
val = input('Enter symbol: ')
if val == 's':
break
Enter symbol: qqwer Enter symbol: asf Enter symbol: s
# continue.
a = 10
while a>0:
a -= 1
if a % 2:
continue
print(a)
8 6 4 2 0
# Простейший for-loop.
# range(n) - функция, которая возвращает итерируемый объект, содержащий
# числа от 0 до n (правый конец не включая).
for i in range(5):
print(i)
0 1 2 3 4
# Проверим, является ли число простым.
# range(a, b) - возвращает итерируемый объект, содержащий числа от a до b,
# не включая b.
num = int(input('Введите число > 2: '))
simple = True # нам приходится завести флаг
for i in range(2, num): # пока не будем заморачиваться над оптимизацией
if not num % i:
simple = False
break
if simple:
print('Простое')
else:
print('Составное')
Введите число > 2:
# А сейчас то же самое, но с блоком else. # Код выглядит значительно легче. num = int(input('Введите число > 2: ')) for i in range(2, num): # пока не будем заморачиваться над оптимизацией if not num % i: print('Составное') break else: print('Простое')
Введите число > 2: 2 Простое
Задачи для закрепления
- Пользователь вводит n. Вывести кубы первых n целых положительных чисел.
- Даны два целых числа A и В. Выведите все числа от A до B включительно, в порядке возрастания, если A < B, или в порядке убывания в противном случае.
n = 3
for i in range(1, n + 1):
if n > 0:
print(i ** 3)
1 8 27
a = 7
b = 2
if a < b:
for i in range(a, b+1):
print(i)
elif a > b:
for i in range(a, b-1, -1):
print(i)
7 6 5 4 3 2
for element in []:
print(lst.count(element))
a = 2
b = 7
direction = 1 if a<b else -1
for i in range(a, b + direction, direction):
print(i, end=», «)
2, 3, 4, 5, 6, 7,
a = 2
b = 7
direction = 1 if a<b else -1
# почему direction нужен
print(*range(a, b + direction, direction), sep=’, ‘)
2, 3, 4, 5, 6, 7
Подпишитесь на рассылку