ТЕОРИЯ И ПРАКТИКА
-
Ввод и вывод данных
- Задачи
-
Условия
- Задачи
-
Цикл for
- Задачи
-
Строки
- Задачи
-
Цикл while
- Задачи
-
Списки
- Задачи
-
Двумерные массивы
- Задачи
-
Словари
- Задачи
-
Множества
- Задачи
-
Функции и рекурсия
- Задачи
Занятие 3. цикл for в питоне
Цикл for в Python для перебора
Цикл for в Python: определение
Цикл for — это одна из фундаментальных управляющих конструкций в Python. Он предназначен для итерации (или последовательного перебора) элементов в любом итерируемом объекте, таком как списки, строки, словари или диапазоны чисел. Проще говоря, цикл for берет коллекцию элементов и выполняет блок кода для каждого из этих элементов по очереди.
Назначение и области применения
Основное назначение цикла for — автоматизация повторяющихся задач. Вместо того чтобы писать один и тот же код много раз для разных элементов, вы пишете его один раз внутри цикла, и Python сам применяет его ко всей коллекции.
Области применения безграничны:
- Обработка каждого файла в папке.
- Чтение каждой строки из текстового файла.
- Выполнение математических операций над каждым числом в списке.
- Проверка каждого пользователя в базе данных на соответствие какому-либо условию.
Общая структура цикла for
Циклы for и in в Python
Синтаксис цикла for прост и интуитивно понятен. Он всегда использует ключевые слова for и in.
for временная_переменная in итерируемый_объект:
# Блок кода, который будет выполняться для каждого элемента
for: Ключевое слово, начинающее цикл.временная_переменная: Имя, которое вы придумываете. В каждой итерации (повторении) цикла этой переменной будет присваиваться очередной элемент изитерируемого_объекта. Например, если мы перебираем список[10, 20, 30], эта переменная сначала будет равна10, потом20, а затем30.in: Ключевое слово, которое связывает временную переменную с коллекцией.итерируемый_объект: Коллекция элементов для перебора (например, список, строка).:: Двоеточие обязательно в конце строки, оно сообщает Python, что дальше пойдет блок кода, относящийся к циклу.
Блок кода в цикле
Весь код, который должен выполняться внутри цикла, обязательно должен иметь отступ (обычно 4 пробела). Именно отступ показывает Python, какие команды относятся к циклу, а какие — нет. Как только отступ заканчивается, цикл считается завершенным.
Итерация по различным коллекциям
Цикл for универсален и может работать с разными типами коллекций данных в Python.
Итерация по спискам
Списки (lists) — один из самых частых объектов для перебора. Цикл for последовательно пройдет по каждому элементу списка от начала до конца.
Пример со списком чисел
Предположим, у нас есть список оценок, и мы хотим напечатать каждую из них.
grades = [5, 4, 5, 3, 4, 5]
print("Оценки ученика:")
for grade in grades:
# Переменная 'grade' на каждой итерации будет принимать новое значение из списка
print(grade)
print("Перебор оценок завершен.")
Итерация по строкам
Строка (string) в Python — это тоже итерируемый объект. Она рассматривается как последовательность символов.
Особенности перебора символов
При итерации по строке временная переменная будет поочередно принимать значение каждого символа, включая пробелы и знаки препинания.
message = "Привет, мир!"
for char in message:
# Переменная 'char' (от character - символ) будет содержать по одному символу на каждой итерации
print(char)
Итерация по словарям
Словари (dictionaries) хранят данные в виде пар «ключ:значение». По умолчанию итерация по словарю происходит по его ключам.
user_info = {
"name": "Алексей",
"age": 30,
"city": "Москва"
}
print("Перебор по ключам (поведение по умолчанию):")
for key in user_info:
# 'key' будет принимать значения "name", "age", "city"
print(key)
Итерация по значениям словаря
Если вам нужны только значения, используйте метод .values().
print("\nПеребор по значениям:")
for value in user_info.values():
# 'value' будет принимать значения "Алексей", 30, "Москва"
print(value)
Итерация по ключам и парам ключ-значение (дополнительно)
Для одновременного получения и ключа, и значения используйте метод .items(). Это самый удобный способ перебора словарей.
print("\nПеребор по парам ключ-значение:")
for key, value in user_info.items():
# Мы сразу получаем и ключ, и значение в две разные переменные
print(f"Ключ: {key}, Значение: {value}")
Функция range(): генерация числовых последовательностей
Назначение и описание функции
Часто бывает нужно выполнить цикл определенное количество раз, не привязываясь к конкретной коллекции. Для этого существует встроенная функция range(). Она создает специальный объект, который генерирует последовательность целых чисел "на лету", не храня их все в памяти.
Параметры функции range(start, stop, step)
Функция range() может принимать от одного до трех аргументов:
range(stop): Генерирует числа от0доstop - 1.range(start, stop): Генерирует числа отstartдоstop - 1.range(start, stop, step): Генерирует числа отstartдоstop - 1с шагомstep.
Важно: Верхняя граница (stop) никогда не включается в последовательность!
Итерация по числовым последовательностям с range()
Комбинация for и range() — это классический способ организовать цикл с заданным числом повторений.
Пример простой итерации по range()
Выполним блок кода 5 раз.
# range(5) сгенерирует последовательность 0, 1, 2, 3, 4
for i in range(5):
print(f"Повторение номер {i}")
Инкремент и декремент
Понятие инкремента и декремента
Инкремент — увеличение значения
Инкремент — это операция увеличения числовой переменной на определенную величину (чаще всего на 1).
Декремент — уменьшение значения
Декремент — это обратная операция, уменьшение числовой переменной.
Инкремент переменной в Python
Отсутствие оператора ++
В отличие от таких языков, как C++ или Java, в Python нет операторов инкремента ++ и декремента --. Попытка их использовать вызовет синтаксическую ошибку.
Использование оператора +=
Для инкремента используется оператор сложения с присваиванием +=. Запись \[ x += 1 \] является краткой формой для \[ x = x + 1 \].
Пример увеличения переменной на 1
Давайте посчитаем, сколько всего денег мы накопим, откладывая по 1 монете 10 раз.
wallet = 0 # Начальное количество монет
for i in range(10):
# Увеличиваем значение переменной wallet на 1
wallet += 1
print(f"День {i+1}: в кошельке {wallet} монет")
Декремент переменной в Python
Использование оператора -=
Для декремента используется оператор вычитания с присваиванием -=. Запись \[ x -= 1 \] является краткой формой для \[ x = x - 1 \].
Пример уменьшения переменной на 1
Обратный отсчет перед запуском ракеты.
timer = 10
print("Начинаем обратный отсчет!")
while timer > 0:
print(timer)
# Уменьшаем таймер на 1
timer -= 1
print("Пуск!")
Использование инкремента и декремента с другими операторами
*Операторы математические , если
Операторы += и -= — это часть семейства "операторов присваивания с операцией". Существуют также *=, /=, %= и другие. Их можно использовать внутри условных конструкций (if).
Примеры применения с разными операторами
Подсчитаем сумму только четных чисел от 1 до 10.
total_sum = 0
for number in range(1, 11): # Числа от 1 до 10
# Проверяем, является ли число четным
if number % 2 == 0:
print(f"Нашли четное число: {number}. Добавляем к сумме.")
# Инкрементируем сумму только если условие выполнено
total_sum += number
print(f"Итоговая сумма четных чисел: {total_sum}") # 2 + 4 + 6 + 8 + 10 = 30
Использование переменных вместо чисел для инкремента
Величина, на которую вы увеличиваете или уменьшаете переменную, не обязана быть константой. Это может быть другая переменная.
account = 100
deposits = [10, 50, 25, 15] # Список пополнений
for deposit_amount in deposits:
# Увеличиваем счет на сумму из списка
# \[ account += deposit_amount \]
account += deposit_amount
print(f"Счет пополнен на {deposit_amount}. Текущий баланс: {account}")
Итерация с указанием начального значения и шага
Объяснение параметров start, stop, step в range()
Мы можем полностью контролировать последовательность, генерируемую range(), используя все три параметра:
start: Первое число в последовательности.stop: Граница, до которой идет генерация (не включая саму границу).step: Шаг, с которым изменяется число на каждой итрации.
Пример итерации с шагом +2
Выведем все четные числа от 2 до 10 включительно.
# Начинаем с 2, идем до 11 (чтобы 10 вошло), с шагом 2
for number in range(2, 11, 2):
print(number)
Особенности использования отрицательного шага (декремента) — опционально
Если шаг (step) отрицательный, цикл пойдет в обратном порядке. В этом случае значение start должно быть больше значения stop.
print("Обратный отсчет с шагом -3:")
# Начинаем с 10, идем до 0 (не включая), с шагом -3
# Последовательность: 10, 7, 4, 1
for i in range(10, 0, -3):
print(i)
Управление циклом for
Иногда нам нужно изменить стандартное поведение цикла: прервать его досрочно или пропустить текущую итерацию.
Оператор break в Python циклах for
Назначение — досрочный выход из цикла
Оператор break немедленно и полностью прекращает выполнение цикла. Код переходит к первой строке после блока цикла.
Пример использования break
Ищем первое число в списке, которое делится на 7. Как только находим — останавливаем поиск.
numbers = [12, 45, 23, 49, 16, 56, 8]
found_number = None
for num in numbers:
print(f"Проверяем число {num}...")
if num % 7 == 0:
found_number = num
print(f"Найдено число, которое делится на 7: {num}. Прерываем цикл.")
break # Выходим из цикла
if found_number:
print(f"Первое найденное число: {found_number}")
Оператор continue Python контроль цикла
Пропуск оставшейся части кода в текущей итерации
Переход к следующей итерации
Оператор continue прерывает только текущую итерацию. Он пропускает весь оставшийся код внутри блока цикла для текущего элемента и немедленно переходит к следующему элементу в последовательности.
Пример использования continue
Обработаем список, но проигнорируем все отрицательные числа.
data = [10, -5, 20, 0, -15, 30]
processed_data = []
for item in data:
if item < 0:
print(f"Встретилось отрицательное число {item}. Пропускаем.")
continue # Переходим к следующему элементу, не выполняя код ниже
print(f"Обрабатываем число {item}.")
processed_data.append(item)
print(f"Обработанные данные (только положительные): {processed_data}")
Блок else в цикле for
Когда выполняется блок else
В Python у циклов for (и while) есть уникальная особенность — блок else. Код в этом блоке выполняется только в том случае, если цикл завершился естественным образом, то есть прошел все итерации и не был прерван оператором break.
Пример цикла с else без прерываний break
Проверяем, есть ли в списке покупок "молоко". В данном примере его нет, цикл завершится до конца.
shopping_list = ["хлеб", "яйца", "сыр"]
for item in shopping_list:
print(f"Проверяем: {item}")
if item == "молоко":
print("Молоко найдено!")
break
else:
# Этот блок выполнится, так как break не был вызван
print("Цикл завершился, но молоко так и не было найдено в списке.")
Поведение else при использовании break — не выполняется
Теперь добавим "молоко" в список. Цикл будет прерван, и блок else не выполнится.
shopping_list = ["хлеб", "молоко", "яйца", "сыр"]
for item in shopping_list:
print(f"Проверяем: {item}")
if item == "молоко":
print("Молоко найдено!")
break # Прерываем цикл
else:
# Этот блок НЕ выполнится
print("Цикл завершился, но молоко так и не было найдено в списке.")
Дополнительные примечания и советы
Вложенные циклы for — упоминание (опционально)
Вы можете помещать один цикл внутрь другого. Это называется вложенным циклом. Внешний цикл выполняет одну итерацию, а внутренний за это время успевает выполниться полностью. Это полезно для работы с двумерными структурами, например, матрицами или для создания таблиц.
# Пример таблицы умножения
for i in range(1, 4): # Внешний цикл (строки)
for j in range(1, 4): # Внутренний цикл (столбцы)
print(f"{i} * {j} = {i*j}", end="\t") # end="\t" для вывода в одну строку с табуляцией
print() # Переход на новую строку после завершения внутреннего цикла
Использование циклов for с функциями и генераторами (опционально)
Циклы for прекрасно работают с функциями, которые возвращают итерируемые объекты. Особый вид функций — генераторы (использующие yield) — создают значения по одному за раз, что идеально подходит для обработки больших объемов данных в цикле for без затрат памяти.
Практические советы для эффективного использования циклов
- Давайте осмысленные имена переменным. Вместо
for i in list1:пишитеfor user in users:илиfor product in products:. Код становится намного читабельнее. - Не изменяйте коллекцию, по которой итерируетесь. Добавление или удаление элементов из списка во время его перебора может привести к непредсказуемому поведению и ошибкам. Лучше создайте новый список для результатов.
- Держите тело цикла коротким. Если блок кода внутри цикла становится слишком большим и сложным, вынесите его логику в отдельную функцию. Это улучшит читаемость и позволит повторно использовать код.