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

Подпишитесь на рассылку

Если это было вам полезно — вы можете сказать нам спасибо!