graph TD
A([Начало]) --> G(( ))
G --> B{Остались элементы?}
B -- Да --> C[<элемент> = след. элем.]
C --> D[блок инструкций]
D --> G
B -- Нет ---> E([Конец])
Занятие № 4. Решение задач с использованием цикла с известным количеством повторений
Цель: изучить применение цикла for; рассмотреть типовые задачи.
Теория
Цикл с определённым количеством повторений
В общем случае, цикл for используется для перебора элементов некой последовательности. Это могут быть символы в строке, элементы списка или целые числа.
Инструкция цикла for записывается следующим образом:
элемент - переменная цикла. На каждой итерации цикла в переменной цикла будет находится очередной элемент последовательности.
Рисунок 1 содержит диаграмму с ходом работы цикла for.
Строка - это последовательность символов, значит с помощью цикла for можно перебрать все символы в строке. В следующем примере выведем на экран все символы строки Привет, мир:
for letter in "Привет, мир":
print(letter)
На каждой итерации данного цикла в переменной letter будет храниться очередная буква из строки Привет, мир. Этот цикл выполнится
x
?
раз.
Как Python понимает, какие инструкции находятся в теле цикла?
В теле любой блочной инструкции (if, while, for) может быть любое количестве строк. Обязателен лишь одинаковый отступ для инструкций.
В теле цикла может быть больше одной инструкции.
Создание последовательности целых чисел
Чтобы переменная цикла for принимала значения из последовательности целых чисел, необходимо эту последовательность сгенерировать. Для этого используется функция range().
Функция range() позволяет задавать начальное и конечное значение в последовательности и шаг.
Самый простой вариант использования функции range() - указать только конечное значение.
n = 10 print(list(range(n)))
Функция range(10) сгенерирует последовательность чисел от 0 до 9. Иными словами, создаётся последовательность целых чисел от 0 до n-1.
Функция range() не создаёт всю генерируемую последовательность целиком, а лишь возвращает очередной элемент последовательность по запросу. Чтобы получить всю последовательности целиком, нужно преобразовать результат работы функции range() в список с помощью функции list(). В описании цикла for преобразовывать последовательность в список необязательно. Со списками вы познакомитесь на последующих занятиях.
В функции range() можно указать начальное и конечно значение последовательности:
print(list(range(2, 15)))
В этом примере будет создана последовательность целых чисел от 2 до 14.
Если указать третий аргумент при вызове функции он будет считаться шагом изменения значения:
print(list(range(2, 15, 2)))
Все три аргумента должны быть целыми числами, но могут быть как положительными, так и отрицательными числами:
print(list(range(15, 1, -3)))
В итоге, функцию range() можно вызвать с тремя наборами аргументов:
Рассмотрим использование функции range(). Выведем на экран квадраты целых чисел от 1 до 10:
for i in range(1, 11):
sq = i ** 2
print(i, sq)
Функция 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 ккалВ левой колонке есть лишние блоки.
print(f"За {i} ч потратится {i * 220} ккал")
for i in range(1, 6):
for i in range(5):
for i in range(1, 5):
print("За {i} ч потратится {i * 220} ккал")
print(f"За i ч потратится i * 220 ккал")
Задание № 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