Цикл for и функция range(). Простые переборы
Цели и задачи
- Цель: к концу урока учащиеся смогут самостоятельно реализовывать алгоритмы перебора числовых диапазонов с использованием цикла for и функции range(), включая задачи на накопление суммы и подсчет количества.
- Образовательная задача: изучить синтаксис цикла for, три формы функции range() и правила работы с итерируемыми объектами в Python.
- Развивающая задача: развить алгоритмическое мышление через применение шаблонов «счетчик» и «накопитель» при решении практических задач.
- Воспитательная задача: способствовать формированию навыка рациональной организации деятельности (автоматизация рутинных задач).
Планируемые результаты
Личностные
- Формирование ответственного отношения к обучению и готовности к саморазвитию.
- Осознание важности программирования как инструмента решения профессиональных задач в будущем.
- Развитие критического мышления при анализе эффективности различных алгоритмических конструкций.
Метапредметные
- Умение определять понятия, создавать обобщения и устанавливать аналогии.
- Навык формализации условия задачи и построения информационной модели.
- Способность к самоконтролю и коррекции действий в процессе написания и отладки программного кода.
Предметные
- Знание синтаксиса цикла for и назначения функции range().
- Умение организовывать прямой и обратный перебор целых чисел с заданным шагом.
- Владение навыками перебора элементов списков и символов строк.
- Умение решать базовые задачи ЕГЭ по информатике, связанные с анализом и реализацией циклов.
Универсальные учебные действия (УУД)
Личностные УУД
- Смыслообразование (связь между изучением циклов и возможностью автоматизации сложных вычислений).
- Нравственно-этическая ориентация в вопросах использования чужого кода.
Регулятивные УУД
- Планирование последовательности шагов при реализации циклического алгоритма.
- Прогнозирование результата работы программы до её запуска.
- Коррекция кода при обнаружении синтаксических или логических ошибок.
Познавательные УУД
- Логические действия: анализ структуры range(), синтез алгоритма суммирования.
- Постановка и решение проблемы: как эффективно обработать большой объем данных без дублирования кода.
- Работа с информацией: преобразование текстового описания задачи в программный код.
Коммуникативные УУД
- Умение аргументировать выбор типа цикла (for vs while) для конкретной задачи.
- Владение языковыми средствами для объяснения логики работы программы.
Подготовка учителя к уроку
- Проверить работоспособность среды разработки (IDLE, PyCharm или VS Code) на всех ПК в классе.
- Подготовить презентацию с визуализацией работы range() на числовой прямой.
- Распечатать «Мини-шпаргалку по range()» для каждого ученика (15-20 экз.).
- Загрузить в общую папку файл с шаблонами задач для практической части.
- Подготовить демонстрационный скрипт с примерами ошибок (отступы, двоеточие, границы диапазона).
Ход урока
Этап 1. Мотивация и актуализация знаний (5 мин)
Цель этапа: создать проблемную ситуацию, демонстрирующую неэффективность линейного программирования для повторяющихся задач.
Время | Действие учителя | Действие учеников |
|---|---|---|
2 мин | «Здравствуйте! Представьте, что вы — разработчики системы оповещения. Вам нужно вывести на экран слово "Внимание!" ровно 5 раз. Как бы вы это сделали сейчас?» Учитель пишет на доске пять раз print("Внимание!"). «А если нужно вывести его 1000 раз? Или 1 000 000? Будем ли мы копировать эту строку миллион раз?» | Учащиеся осознают проблему. Отвечают: «Нет, это долго», «Код будет слишком большим», «Неудобно исправлять ошибку в тексте». |
3 мин | «Верно. В программировании для этого существуют циклы. Посмотрите на доску: for i in range(5): print("Внимание!"). Всего две строки заменяют любой объем копипаста. Сегодня мы разберемся, как работает этот магический механизм перебора, который Дэвид Бизли в своем руководстве называет основным инструментом работы с данными в Python.» | Слушают учителя, записывают тему урока в тетрадь. |
Завершение этапа: учитель подводит итог: «Итак, мы поняли, что ручное повторение кода — это путь в никуда. Давайте построим план нашего исследования: что такое цикл, как работает range и как заставить компьютер считать за нас.»
Этап 2. Открытие нового знания: Цикл for и итерация (10 мин)
Цель этапа: изучить базовый синтаксис цикла for и понятие итерации на основе итерируемых объектов (списки, строки).
Время | Действие учителя | Действие учеников |
|---|---|---|
5 мин | «Цикл for в Python — это цикл перебора. Он берет последовательность и по очереди достает из нее элементы. Запишем общую схему: for переменная in последовательность: команды. Обратите внимание на двоеточие и отступ в 4 пробела — это тело цикла. Давайте попробуем перебрать список чисел: for x in [10, 20, 30]: print(x). Что мы увидим?» | Записывают синтаксис в тетради. Предполагают ответ: «Числа 10, 20 и 30 на разных строках». Проверяют в среде разработки. |
5 мин | «Важное слово — итерация. Это одно выполнение тела цикла. Если в списке 3 числа, сколько будет итераций? Правильно, три. Python сам понимает, когда элементы закончились. Но for умеет работать и со строками. Попробуйте написать цикл, который перебирает слово "Python". Что произойдет?» | Отвечают: «Три итерации». Пишут код: for letter in "Python": print(letter). Наблюдают вывод слова по буквам. |
Посмотрите план целиком
Зарегистрируйтесь — и откройте план урока по этой теме полностью: цели, ход урока и рефлексия по ФГОС.
Запись в тетрадях
- Итерация — одно выполнение тела цикла.
- Синтаксис: for <переменная> in <последовательность>:
- Отступ (4 пробела) обязателен для команд внутри цикла.
Завершение этапа: учитель подводит итог: «Мы научились перебирать готовые списки и буквы. Но что если нам нужно перебрать миллион чисел? Не будем же мы писать их в список вручную. Для этого существует функция range().»
Этап 3. Изучение функции range() (10 мин)
Цель этапа: разобрать три формы функции range() и усвоить правило «правая граница не включается».
Время | Действие учителя | Действие учеников |
|---|---|---|
4 мин | «Функция range() создает арифметическую последовательность. Главное правило, которое нужно выучить как таблицу умножения: правая граница НЕ входит в диапазон. Если я пишу range(5), какие числа я получу? От 0 до 4. Пятерка — это стена, перед которой мы останавливаемся. Запишем первую форму: range(stop).» | Записывают: range(5) -> 0, 1, 2, 3, 4. Делают пометку: «stop не включается». |
6 мин | «Вторая форма — range(start, stop). Например, range(2, 6) даст нам 2, 3, 4, 5. И третья форма, самая мощная — с шагом: range(start, stop, step). Как нам вывести только четные числа от 2 до 10 включительно? Мы напишем range(2, 11, 2). Почему 11? Чтобы 10 вошло в диапазон. А как сделать обратный отсчет? Нужно поставить отрицательный шаг: range(10, 0, -1).» | Экспериментируют с кодом в интерпретаторе. Пробуют вывести числа в обратном порядке. Обсуждают, почему range(10, 0) без шага -1 не работает. |
Эталонные значения range()
- range(5) -> 0, 1, 2, 3, 4
- range(1, 5) -> 1, 2, 3, 4
- range(2, 10, 2) -> 2, 4, 6, 8
- range(10, 0, -1) -> 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
Завершение этапа: учитель подводит итог: «Теперь вы знаете, как генерировать любые числовые ряды. Пришло время применить эти знания для решения реальных задач: суммирования и поиска нужных чисел.»
Этап 4. Практикум: шаблоны «Накопитель» и «Счетчик» (12 мин)
Цель этапа: освоить алгоритмические шаблоны суммирования и подсчета количества элементов по условию.
Время | Действие учителя | Действие учеников |
|---|---|---|
6 мин | «Давайте найдем сумму всех чисел от 1 до 100. Для этого нам нужна переменная-накопитель. Назовем ее total и сначала положим в нее 0. total = 0. Затем в цикле будем добавлять к ней каждое число: total += i. Посмотрите на экран, как меняется значение total на каждой итерации. Это классический паттерн программирования.» | Реализуют программу суммирования. Проверяют результат (5050). Анализируют трассировку цикла (как total растет от 1 до 5050). |
6 мин | «А теперь усложним: посчитаем, сколько чисел от 1 до 100 делятся на 7. Здесь нам понадобится условие if внутри цикла. Если число делится на 7 без остатка (i % 7 == 0), мы увеличиваем наш счетчик count на 1. Попробуйте написать этот код самостоятельно.» | Самостоятельно пишут код с вложенным условием. Сравнивают результаты с соседом по парте. Ответ должен быть 14. |
Эталон решения (Сумма чисел)
total = 0
for i in range(1, 101):
total += i
print(total)
for i in range(1, 101):
total += i
print(total)
Завершение этапа: учитель подводит итог: «Вы только что решили две фундаментальные задачи программирования. Эти алгоритмы — кирпичики, из которых строятся сложные системы аналитики данных.»
Этап 5. Рефлексия и подведение итогов (8 мин)
Цель этапа: закрепить понимание различий между циклами и проверить усвоение материала через экспресс-опрос.
Время | Действие учителя | Действие учеников |
|---|---|---|
4 мин | «Давайте подведем итоги. У нас есть цикл while, который мы учили раньше, и цикл for. В чем их главное отличие в Python? Подсказка: Бизли говорит, что for — это про перебор. А когда удобнее использовать range?» | Отвечают: «for удобнее, когда мы заранее знаем, сколько раз нужно повторить или что именно перебрать. while лучше для условий, которые зависят от внешних факторов». |
4 мин | Учитель проводит блиц-опрос: «Что выведет range(1, 10, 3)?», «Как вывести 10 раз слово "Привет", не используя переменную цикла?». Выдает домашнее задание. | Отвечают: «1, 4, 7». «Использовать нижнее подчеркивание: for _ in range(10): print("Привет")». Записывают домашнее задание. |
Критерии оценивания практической работы
- «5» — все задачи практикума решены верно, соблюдены отступы, использованы корректные диапазоны range(), код оптимизирован.
- «4» — задачи решены, но допущены незначительные ошибки в границах range() (ошибка на единицу) или пропущено двоеточие, которые были исправлены самостоятельно.
- «3» — ученик понимает логику цикла, но испытывает затруднения с синтаксисом или вложенными конструкциями (if внутри for), требуется помощь учителя.
Рефлексия
Вопрос для ученика | Цель вопроса |
|---|---|
Какая форма range() показалась вам самой сложной и почему? | Выявление затруднений в понимании шага и границ диапазона. |
В каких задачах ЕГЭ вы уже видели подобные циклы? | Актуализация связи темы с итоговой аттестацией (задания 6, 17, 24). |
Сможете ли вы объяснить младшему брату, почему range(5) не выдает число 5? | Проверка осознанности усвоения главного правила функции. |
Завершающее слово учителя
«Сегодня мы заложили фундамент автоматизации. Цикл for — это сердце большинства программ, от простых калькуляторов до систем искусственного интеллекта. Помните: программист — это не тот, кто много пишет, а тот, кто умеет заставить компьютер работать вместо себя. На следующем уроке мы научимся прерывать циклы и делать их еще умнее. До встречи!»
Домашнее задание
Уровень сложности | Задания | Описание |
|---|---|---|
Базовый (обязательный) | Вывести числа от 20 до 1; вывести 10 раз слово Python. | Закрепление навыков обратного перебора и повторения действий. |
Средний (повышающий) | Найти сумму всех нечетных чисел от 1 до 50. | Комбинация цикла с шагом и накопителя. |
Продвинутый (дополнительный) | Вывести таблицу умножения на число N (вводится с клавиатуры). | Применение цикла для генерации математических таблиц. |
Контрольный вопрос перед уходом: «Сколько чисел выведет цикл for i in range(2, 2)?» (Ответ: ни одного).