Циклы в 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. Больше двух уровней — сигнал вынести внутренний цикл в функцию.