Очень часто случается, что нам надо повторить некоторые действия определенное число раз. Для этого в Python есть разные типы циклов.
Стандартный цикл со счётчиком выглядит так: for переменная in range(start, end, step), где значение переменной будет проходить от start(включительно) до end(не включительно) с шагом step.
for переменная in range(start, end, step)переводится с английского как:для переменной в диапазоне(начало, конец, шаг)
По умолчанию на каждой итерации цикла к значению переменной прибавляется 1, а счёт начинается c 0. Можно указать только до какого числа считать:
In [1]:
for i in range(5): # Обратите внимание на двоеточие и отступ
print(i)
Можно указать диапазон чисел (как и везде в Python, левая граница включительно, правая — не включительно):
In [2]:
for i in range(2, 5):
print(i)
Пример, в котором задаётся шаг, т.е. сколько прибавлять к переменной после каждой итерации цикла:
In [3]:
for i in range(2, 10, 3):
print(i)
А что будет, если левая граница больше либо равна правой?
In [4]:
for i in range(5, 2):
print(i)
for i in range(2, 2):
print(i)
# В выводе ничего нет
А если задать отрицательный шаг?
In [5]:
for i in range(5, 2, -1):
print(i)
Обратите внимание, тут всё ещё левая граница включительно, правая — не включительно.
Самый просто устроенный цикл — while. Он работает точно так же как и в остальных языках программирования: пока условие верно, выполняй тело цикла.
In [6]:
i = 0
while i < 5:
i += 1
print(i)
whileв переводе с английского —пока
Естественно, после while может стоять любое условие.
Для примера давайте напишем программу, которая выводит наименьшую степень двойки, которая больше заданного числа n.
In [7]:
n = int(input())
current_power, i = 1, 0
while n >= current_power:
current_power *= 2
i += 1
print(n, "<", current_power, "= 2 **", i)
Оператор break прерывает выполнение тела цикла и прерывает сам цикл:
In [8]:
i = 0
while True:
print("before", i)
if i == 2:
break
print("after", i)
i += 1
print("after while")
Оператор continue прерывает выполнение тела цикла, но сам цикл продолжает выполняться:
In [9]:
i = 0
while True:
print("before", i)
if i == 1:
i += 2 # i должно поменяться, иначе цикл будет выполняться вечно
continue
if i == 4:
break
print("after", i)
i += 1
print("after while")
continueв переводе с английского —продолжить,break—прервать
Те же самые операторы работают и для цикла for:
In [10]:
for i in range(10):
print("before", i)
if i == 1:
continue
if i == 2:
break
print("after", i)
В Python у цикла for также есть возможность написать ветку else. Это будет работать так: если цикл был завершен при помощи break, то ветка else выполнена не будет, в противном случае, после выполнения цикла она будет выполнена.
In [11]:
a = int(input())
for i in range(11):
if a <= 2 ** i:
print("a не больше чем 2 в степени", i)
break
else:
print("a больше чем 1024")
Такая реализация иногда заметно проще, чем заводить отдельную переменную для флага или писать if ... else.