Перейти к содержимому

6. Циклы

Иллюстрация к уроку

В Python for всегда итерирует по итерируемому объекту:

# По списку
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
# По строке
for char in "Python":
print(char)
# По словарю
user = {"name": "Яша", "age": 2, "role": "admin"}
for key in user: # итерация по ключам
print(key)
for value in user.values(): # по значениям
print(value)
for key, value in user.items(): # по парам
print(f"{key}: {value}")
# range(stop) — от 0 до stop-1
for i in range(5):
print(i) # 0, 1, 2, 3, 4
# range(start, stop)
for i in range(1, 6):
print(i) # 1, 2, 3, 4, 5
# range(start, stop, step)
for i in range(0, 20, 5):
print(i) # 0, 5, 10, 15
# Обратный счёт
for i in range(10, 0, -1):
print(i) # 10, 9, 8, ... 1
# Вместо: for i in range(len(fruits))
fruits = ["apple", "banana", "cherry"]
for i, fruit in enumerate(fruits):
print(f"{i}: {fruit}")
# 0: apple
# 1: banana
# 2: cherry
# Начать с 1
for i, fruit in enumerate(fruits, start=1):
print(f"{i}. {fruit}")
names = ["Анна", "Борис", "Вера"]
scores = [95, 87, 92]
for name, score in zip(names, scores):
print(f"{name}: {score}")
# Анна: 95
# Борис: 87
# Вера: 92
# zip создаёт словарь
result = dict(zip(names, scores))
# {"Анна": 95, "Борис": 87, "Вера": 92}
# Простой while
count = 0
while count < 5:
print(count)
count += 1
# С пользовательским вводом
while True:
command = input("Введи команду (quit для выхода): ")
if command == "quit":
break
print(f"Выполняю: {command}")
# Проверка условия в конце (имитация do-while)
while True:
age = int(input("Введи возраст: "))
if 0 <= age <= 150:
break
print("Некорректный возраст!")
# break — прерывает цикл
for i in range(10):
if i == 5:
break
print(i) # 0, 1, 2, 3, 4
# continue — пропускает итерацию
for i in range(10):
if i % 2 == 0:
continue
print(i) # 1, 3, 5, 7, 9
# else у цикла — выполняется если цикл завершился без break
numbers = [1, 3, 7, 9, 11]
target = 5
for num in numbers:
if num == target:
print("Найдено!")
break
else:
print("Не найдено") # выполнится если break не было
# List comprehension
numbers = range(1, 11)
squares = [x**2 for x in numbers]
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# С условием
even_squares = [x**2 for x in numbers if x % 2 == 0]
# [4, 16, 36, 64, 100]
# Dict comprehension
word_lengths = {word: len(word) for word in ["python", "java", "js"]}
# {"python": 6, "java": 4, "js": 2}
# Set comprehension
unique_lengths = {len(word) for word in ["cat", "bat", "rat", "hello"]}
# {3, 5}
# Generator expression (ленивый — не создаёт весь список)
total = sum(x**2 for x in range(1000000)) # эффективно!
# Таблица умножения
for i in range(1, 4):
for j in range(1, 4):
print(f"{i*j:3}", end="")
print()
# 1 2 3
# 2 4 6
# 3 6 9
# Обход матрицы
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
for row in matrix:
for cell in row:
print(cell, end=" ")
print()
# Вложенный comprehension
flat = [cell for row in matrix for cell in row]
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
transposed = [[row[i] for row in matrix] for i in range(3)]
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
# Фильтрация и трансформация данных
users = [
{"name": "Анна", "age": 25, "active": True},
{"name": "Борис", "age": 17, "active": True},
{"name": "Вера", "age": 30, "active": False},
{"name": "Гена", "age": 22, "active": True},
]
# Активные совершеннолетние пользователи
eligible = [
u["name"] for u in users
if u["active"] and u["age"] >= 18
]
# ["Анна", "Гена"]
# Группировка по полю
from collections import defaultdict
by_active = defaultdict(list)
for user in users:
by_active[user["active"]].append(user["name"])
# {True: ["Анна", "Борис", "Гена"], False: ["Вера"]}
# Подсчёт частоты
text = "the quick brown fox jumps over the lazy dog"
frequency = {}
for word in text.split():
frequency[word] = frequency.get(word, 0) + 1
# Топ 3 самых частых слова
sorted_words = sorted(frequency.items(), key=lambda x: x[1], reverse=True)
top3 = sorted_words[:3]
# Задание 1: FizzBuzz
# Напечатай числа от 1 до 100:
# - если делится на 3: "Fizz"
# - если делится на 5: "Buzz"
# - если делится на 15: "FizzBuzz"
# - иначе: само число
# Задание 2: Обработка данных
products = [
{"name": "Ноутбук", "price": 75000, "category": "electronics"},
{"name": "Мышь", "price": 2000, "category": "electronics"},
{"name": "Стол", "price": 15000, "category": "furniture"},
{"name": "Кресло", "price": 25000, "category": "furniture"},
]
# Найди: общую стоимость, самый дорогой товар, среднюю цену по категориям
# Задание 3: Матрица
# Создай матрицу 5x5, где [i][j] = i * j
# Выведи красиво, найди сумму диагонали

В следующем уроке — функции!