Циклы в Python: шпаргалка

Перебор коллекций, счётчики и досрочный выход из цикла.

for: цикл по коллекции

prices = [349, 99, 199]
total = 0
for price in prices:
    total += price
print(total)   # 647

for перебирает элементы напрямую — индексы для этого не нужны. Не меняй список, по которому идёшь: удаление элементов внутри цикла пропускает соседние.

for и range: цикл по числам

for i in range(3):
    print(i)   # 0, 1, 2

for i in range(2, 10, 2):
    print(i)   # 2, 4, 6, 8

range(stop) считает от нуля, правая граница не входит. Полная форма range(start, stop, step) задаёт начало и шаг.

while: цикл по условию

balance = 1000
months = 0
while balance > 0:
    balance -= 350
    months += 1
print(months)   # 3

while крутится, пока условие истинно — бери его, когда число шагов заранее неизвестно. Что-то внутри обязано менять условие, иначе цикл вечный.

break и continue

for price in [99, 199, -5, 349]:
    if price < 0:
        break      # stop the whole loop
    if price > 150:
        continue   # skip to the next item
    print(price)   # 99

break выходит из цикла целиком, continue пропускает только текущую итерацию. Во вложенных циклах break прерывает лишь внутренний.

enumerate: индекс + элемент

steps = ['clone', 'install', 'run']
for i, step in enumerate(steps, start=1):
    print(i, step)
# 1 clone
# 2 install
# 3 run

enumerate отдаёт пару «номер, элемент» — это питоничнее, чем range(len(items)). start задаёт, с какого числа нумеровать.

Вложенные циклы

for row in range(1, 3):
    for col in range(1, 4):
        print(row * col, end=' ')
    print()
# 1 2 3
# 2 4 6

Внутренний цикл прокручивается целиком на каждом шаге внешнего — итераций получается rows × cols. Больше двух уровней — сигнал вынести внутренний цикл в функцию.

Что дальше