graph TD
A([Начало]) --> G(( ))
G --> B{Остались элементы?}
B -- Да --> C[<элемент> = след. элем.]
C --> D[блок инструкций]
D --> G
B -- Нет ---> E([Конец])
Занятие № 4. Решение задач с использованием цикла с известным количеством повторений
Цель: изучить применение цикла for; рассмотреть типовые задачи.
Теория
Цикл с определённым количеством повторений
В общем случае, цикл for используется для перебора элементов некой последовательности. Это могут быть символы в строке, элементы списка или целые числа.
Инструкция цикла for записывается следующим образом:
элемент - переменная цикла. На каждой итерации цикла в переменной цикла будет находится очередной элемент последовательности.
Рисунок 1 содержит диаграмму с ходом работы цикла for.
Строка - это последовательность символов, значит с помощью цикла for можно перебрать все символы в строке. В следующем примере выведем на экран все символы строки Привет, мир:
На каждой итерации данного цикла в переменной letter будет храниться очередная буква из строки Привет, мир. Этот цикл выполнится
x
?
раз.
Как Python понимает, какие инструкции находятся в теле цикла?
В теле любой блочной инструкции (if, while, for) может быть любое количестве строк. Обязателен лишь одинаковый отступ для инструкций.
В теле цикла может быть больше одной инструкции.
Создание последовательности целых чисел
Чтобы переменная цикла for принимала значения из последовательности целых чисел, необходимо эту последовательность сгенерировать. Для этого используется функция
range()
.
Функция
range()
позволяет задавать начальное и конечное значение в последовательности и шаг.
Самый простой вариант использования функции
range()
- указать только конечное значение.
Функция
range(10)
сгенерирует последовательность чисел от 0 до 9. Иными словами, создаётся последовательность целых чисел от 0 до n-1.
Функция
range()
не создаёт всю генерируемую последовательность целиком, а лишь возвращает очередной элемент последовательность по запросу. Чтобы получить всю последовательности целиком, нужно преобразовать результат работы функции
range()
в список с помощью функции
list()
. В описании цикла for преобразовывать последовательность в список необязательно. Со списками вы познакомитесь на последующих занятиях.
В функции
range()
можно указать начальное и конечно значение последовательности:
В этом примере будет создана последовательность целых чисел от 2 до 14.
Если указать третий аргумент при вызове функции он будет считаться шагом изменения значения:
Все три аргумента должны быть целыми числами, но могут быть как положительными, так и отрицательными числами:
В итоге, функцию
range()
можно вызвать с тремя наборами аргументов:
Рассмотрим использование функции
range()
. Выведем на экран квадраты целых чисел от 1 до 10:
Функция
range(1, 11)
создаст последовательность целых чисел от 1 до 10.
Какое число выведется на экран после выполнения следующей программы:
Верно. Мы находим сумму чисел от 1 до 3. На каждом шаге цикла к переменной sum_ch прибавляется очередное значение из последовательности [1, 2, 3].
Мы получим 4, если в третьей строке мы прибавляли бы к sum_ch не значение переменной цикла i а единицу. 4 - это количество итераций данного цикла.
Это сумма чисел от 0 до 4. Но функция
range(4)
создаст последовательность целых чисел от 1 до 3. Число 4 не включается в последовательность.
В этом коде нет синтаксических ошибок.
Break и continue
В цикле for, как и в цикле while можно использовать инструкцию прерывания цикла break и continue - переход к следующей итерации цикла.
Рассмотрим фрагмент кода:
На экран выведутся x нечётные числа из диапазона от 1 до x ? .
Примеры
Познакомьтесь с готовыми решениями задач.
Пример № 1 (ex01.py)
Посчитайте и выведите на экран сумму n чисел.
Пример работы программы:
Количество чисел: <{4}> ++enter++
Слагаемое: <{8}> ++enter++
Слагаемое: <{3}> ++enter++
Слагаемое: <{1}> ++enter++
Слагаемое: <{7}> ++enter++
Сумма равна 19Пример № 2 (ex02.py)
Создайте калькулятор расчёта денежных вкладов. Пользователь вводит начальную сумму, процент годовых и количество лет. Размер вклада за каждый год рассчитывается по формуле: \[ вклад = вклад * (1 + \frac{процент}{100}) \]
Пример работы программы:
Введите размер вклада: <{150}> ++enter++
Введите процент: <{12}> ++enter++
На сколько лет делается вклад? <{4}> ++enter++
1 год - размер вклада: 168.00 руб
2 год - размер вклада: 188.16 руб
3 год - размер вклада: 210.74 руб
4 год - размер вклада: 236.03 рубПример № 3 (ex02.py)
Программа рассчитывает средний балл по результатам прохождения студентами тестов. Количество студентов и количество отметок задаются в начале программы в константах.
Пример работы программы:
Студент № 1
Тест 1: <{8}> ++enter++
Тест 2: <{7}> ++enter++
Средний балл: 7.5
Студент № 2
Тест 1: <{6}> ++enter++
Тест 2: <{3}> ++enter++
Средний балл: 4.5Задания для самостоятельной работы
Решите следующие задачи самостоятельно.
Задание № 1 (sam01.py)
За один час прогулки, в среднем, тратится 220 ккал. Напишите программу, которая выведет на экран сколько калорий потратится за 1, 2, 3, 4 и 5 часов прогулки.
Пример работы программы:
За 1 ч потратится 220 ккал
За 2 ч потратится 440 ккал
За 3 ч потратится 660 ккал
За 4 ч потратится 880 ккал
За 5 ч потратится 1100 ккалВ левой колонке есть лишние блоки.
Задание № 2 (sam02.py)
В одной миле - 0.6214 километра. Напишите программу, которая выведет таблицу перевода скоростей из км/ч в мили/ч от 60 до 120 км/ч с шагом в 10 км/ч.
Пример работы программы:
км/ч миль/ч
60 37.3
70 43.5
80 49.7
90 55.9
100 62.1
110 68.4
120 74.6range()
можно передать три аргумента - начальное значение, границу и шаг.
Задание № 3 (sam03.py)
Дано целое число \(n > 0\). Возведите число \(n\) в квадрат, используя следующую формулу суммы: \[ n^2=1+3+5+...+(2n-1) \]
Примеры работы программы:
Введите целое число: <{15}> ++enter++
Ответ: 225Введите целое число: <{1}> ++enter++
Ответ: 1range()
выдала последовательность нечётных чисел, начальное значение должно быть равно 1, конечное - 2 * n, шаг - 2.
Задание № 4 (sam04.py)
Напишите программу для отслеживания бюджета за 5 дней. Пользователь вводит 5 значений - доход или расход денег за день. Выведите на экран итоговый бюджет в начале каждого дня и бюджет в конце недели. Бюджет в начале недели считайте равным нулю.
Пример работы программы:
День 1, текущий бюджет: 0
Введите доходы/расходы: <{65}> ++enter++
День 2, текущий бюджет: 65.0
Введите доходы/расходы: <{-21}> ++enter++
День 3, текущий бюджет: 44.0
Введите доходы/расходы: <{40}> ++enter++
День 4, текущий бюджет: 84.0
Введите доходы/расходы: <{15}> ++enter++
День 5, текущий бюджет: 99.0
Введите доходы/расходы: <{-6}> ++enter++
Итоговый бюджет: 93.0Если в начале дня бюджет отрицательный, ввод значений останавливается и выводится сообщение “Отрицательный бюджет”.
Пример работы программы:
День 1, текущий бюджет: 0
Введите доходы/расходы: <{16}> ++enter++
День 2, текущий бюджет: 16.0
Введите доходы/расходы: <{20}> ++enter++
День 3, текущий бюджет: 36.0
Введите доходы/расходы: <{-40}> ++enter++
Отрицательный бюджет
Итоговый бюджет: -4.0break прерывает работу цикла.
Задание № 5 (sam05.py)
Напишите программу для вычисления приблизительного размера популяции бактерий. Пользователь вводит начальное количество бактерий, дневной прирост популяции в процентах и количество дней эксперимента.
Пример работы программы:
Начальная популяция: <{2}> ++enter++
Прирост за день (%): <{40}> ++enter++
Количество дней: <{5}> ++enter++
1 день - размер популяции: 2.80
2 день - размер популяции: 3.92
3 день - размер популяции: 5.49
4 день - размер популяции: 7.68
5 день - размер популяции: 10.76Задание № 6 (sam06.py)
N учеников написали контрольную работу, состоящую из M заданий. Каждое задание оценивается в своё количество баллов. Напишите программу, которая рассчитывает сумму баллов полученную каждым учеником. Количество учеников N и количество заданий M вводятся с клавиатуры.
Пример работы программы:
Количество учеников: <{2}> ++enter++
Количество заданий: <{3}> ++enter++
Задание 1, балл: <{1}> ++enter++
Задание 2, балл: <{2}> ++enter++
Задание 3, балл: <{1}> ++enter++
Студент 1: 4 баллов
Задание 1, балл: <{3}> ++enter++
Задание 2, балл: <{1}> ++enter++
Задание 3, балл: <{3}> ++enter++
Студент 2: 7 балловДобавьте расчёт общего среднего балла по всем ученикам.
...
Общий средний балл: 5.5