Циклы
Существуют два оператора цикла: while и for .. in. Оба варианта могут быть с else частью.
while
while условие_продолжения_цикла:
тело_цикла
или
while условие_продолжения_цикла:
тело_цикла
else:
выполняется_если_не_было_break
Тело цикла пишем с отступом
Найдем сумму чисел от 1 до n=10 (включительно) с помощью цикла while:
n = 10
i = 1
sum = 0
while i <= n:
sum += i
print(sum)
Бесконечный цикл:
while True:
print('hi')
for .. in - перебрать по одному элементы последовательности
Можно перебирать по 1 элементу последовательность, применяя for .. in. Переберем по символу строку 'Hello':
for x in 'Hello':
print(x)
Напечатает:
H
e
l
l
o
Пример: индекс последнего вхождение символа в строке или -1
Найдем номер последнего вхождения буквы k = 'l' в строку 'Hello':
i = 0
ind = -1
for x in 'Hello':
if x == k:
ind = i
print(ind)
При k = 'l' напечатает 3 (нумерация c 0), а при k = 'z' напечатает -1. Получим номер последнего вхождения буквы в строку или -1, если буквы в строке нет.
continue - пропускаем итерацию цикла
Будем при поиске пропускать каждую вторую букву, т.е. буквы 'e' и 'l'.
continue - перейти к следующей итерации цикла.
i = 0
ind = -1
for x in 'Hello':
if i % 2 != 0: # пропускаем каждый второй символ
continue
if x == k:
ind = i
print(ind)
break - прерываем цикл
Найдем индекс первого вхождения символа в строку. Как только его нашли, дальше цикл выполнять не надо. Прервем цикл с помощью оператора break.
i = 0
ind = -1
for x in 'Hello':
if x == k:
ind = i
break
# сюда передаст управление оператор break
print(ind)
for .. else
Можно использовать расширенную форму оператора for:
for переменная in последовательность:
операторы цикла
else:
выполняется, если в цикле не выполнялось break
Напечатаем YES, если символ из переменной k в строке есть, и NO, если его нет:
for x in 'Hello':
if x == k:
print('YES') # печатаем YES и выходим из цикла
break
else:
print('NO') # если break не было, печатаем NO
Оператор while тоже имеет форму while .. else
range(от, до, шаг) - последовательность чисел
Напечатаем числа от 0 (включительно) до 10 (не включая 10). Последовательность чисел [0, 10) сделаем с помощью range.
for x in range(10):
print(x)
- range(10) - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
- range(3, 10) - 3, 4, 5, 6, 7, 8, 9
- range(3, 10, 2) - 3, 5, 7, 9
enumerate - индексы и значения
Можно перебирать не только по значениям, но получать на каждом шаге и индекс, и значение.
enumerate - дает последовательность пар индекс, значение
for i, x in enumerate('Hello'):
print(i, x)
напечатает:
0 H
1 e
2 l
3 l
4 o