Занятие № 4. Решение задач с использованием цикла с известным количеством повторений
Цель: изучить применение цикла for; рассмотреть типовые задачи.
Теория
Цикл с определённым количеством повторений
В общем случае, цикл for используется для перебора элементов некой последовательности. Это могут быть символы в строке, элементы списка или целые числа.
Инструкция цикла for записывается следующим образом:
элемент - переменная цикла. На каждой итерации цикла в переменной цикла будет находится очередной элемент последовательности.
Рисунок 1 содержит диаграмму с ходом работы цикла for.
Строка - это последовательность символов, значит с помощью цикла for можно перебрать все символы в строке. В следующем примере выведем на экран все символы строки Привет, мир:
На каждой итерации данного цикла в переменной letter будет храниться очередная буква из строки Привет, мир. Этот цикл выполнится x?11 раз.
✔
Как Python понимает, какие инструкции находятся в теле цикла?
В теле любой блочной инструкции (if, while, for) может быть любое количестве строк. Обязателен лишь одинаковый отступ для инструкций.
В теле цикла может быть больше одной инструкции.
Точка с запятой для этого не используется. Блок инструкций оформляется с помощью одинакового отступа. Однако с помощью ; можно записать несколько инструкций в одной строке:
a =1; b =2;print(a + b)
Лучше так не делать и записывать инструкции с новой строки для лучшей читаемости кода.
Создание последовательности целых чисел
Чтобы переменная цикла for принимала значения из последовательности целых чисел, необходимо эту последовательность сгенерировать. Для этого используется функция range().
Функция range() позволяет задавать начальное и конечное значение в последовательности и шаг.
Самый простой вариант использования функции range() - указать только конечное значение.
Функция range(10) сгенерирует последовательность чисел от 0 до 9. Иными словами, создаётся последовательность целых чисел от 0 до n-1.
Технические детали
Функция range() не создаёт всю генерируемую последовательность целиком, а лишь возвращает очередной элемент последовательность по запросу. Чтобы получить всю последовательности целиком, нужно преобразовать результат работы функции range() в список с помощью функции list(). В описании цикла for преобразовывать последовательность в список необязательно. Со списками вы познакомитесь на последующих занятиях.
В функции range() можно указать начальное и конечно значение последовательности:
#ввод числа n
n = int(input("Введите n: "))
#переменная хранящая сумму
s = 0
for i in range(1, n):
if i % 2 == 0:
print(i)
s = s + i # формула суммы
#вывод ответа
print("Сумма:", s)
Значение переменной i в цикле for будет меняться от x?1 до xn-1. В строке номер x6 проверяем, является ли значение в i чётным. Если да, то прибавляем его к текущему значению суммы в переменной s.
#ввод числа N
n = int(input("Введите n: "))
#переменная хранящая сумму
s = 0
#в функции range задан шаг изменения i
for i in range(2, n, 2):
print(i)
s = s + i
print("Ответ:", s)
В этом коде третий аргумент функции range() отвечает за xшаг изменения переменной цикла i. Так как первое значение этой переменной будет равно x2 и шаг изменения значения равен двум, то с помощью цикла будем перебирать только чётные целые числа.
Пример № 2 (ex02.py)
Создайте калькулятор расчёта денежных вкладов. Пользователь вводит начальную сумму, процент годовых и количество лет. Размер вклада за каждый год рассчитывается по формуле:
вкладвкладпроцент
Программа выводит размер вклада за каждый год.
1
2
3
4
5
6
7
money = float(input("Введите размер вклада: "))
proc = float(input("Введите процент: "))
years_num = int(input("На сколько лет делается вклад? "))
for year in range(1, years_num + 1):
money = money * (1 + proc / 100)
print(year, "год - размер вклада:", money, "руб.")
money = float(input("Введите размер вклада: "))
proc = float(input("Введите процент: "))
years_num = int(input("На сколько лет делается вклад? "))
for year in range(1, years_num + 1):
money = money * (1 + proc / 100)
print(year, "год - размер вклада:", money, "руб.")
После ввода с клавиатуры, в переменных money и proc будут храниться значения xвещественного типа. Переменная цикла for с именем x?year будет принимать значения от 1 до years_num + 1.
Задания для самостоятельной работы
Задание № 1 (sam01.py)
Выведите n раз число k. Целые числа n и k вводятся с клавиатуры.
Пример работы программы:
Введите n: 5
Введите k: 3
3
3
3
3
3
Плюс, если вывод будет выглядеть следующим образом:
Введите n: 5
Введите k: 3
33333
Задание № 2 (sam02.py)
Найдите произведение целых чисел от 1 до n и выведите его на экран.
Для хранения произведения понадобится переменная-аккумулятор, например с именем prod.
Начальное значение переменной-аккумулятора должно быть равно 1.
Чтобы получить последовательность целых чисел от 1 до n нужно записать функцию range():
range(1, n+1)
# ввод nn =int(input("Введите n:"))# начальное значение произведенияprod =1# запуск цикла от 1 до n+1for i inrange(1, n+1):prod = prod * i# вывод ответаprint("Произведение:", prod)
Задание № 3 (sam03.py)
Даны два целых числа a и b. Найти сумму всех целых чисел от a до b включительно.
Пример работы программы:
a: 10
b: 25
Ответ: 280
Задание № 4 (sam04.py)
Дано целое число n (n > 0). Найти квадрат данного числа, используя для его вычисления следующую формулу:
Обратите внимание, что мы находим сумму нечётных чисел от 1 до .
Чтобы функция range() выдала нужную последовательность, конечное значение должно быть равно а шаг - равен двум.
# ввод nn =int(input("n>0: "))# начальное значение суммыs =0# запускаем цикл от 1 до 2n c шагом 2for i inrange(1, 2* n, 2):s = s + i# вывод ответаprint("n^2=", s, "проверка:", n **2)
Задание № 5 (sam05.py)
Стоимость одного килограмма конфет вводится с клавиатуры. Выведите на экран последовательно стоимость 1, 2, … , 10 кг конфет. Если на одном из шагов стоимость превышает 100 рублей, цикл должен прерываться.
Каждая строка с ответом должна быть отформатирована следующим образом:
Введите стоимость одного кг конфет: 15
...
5 кг конфет стоят 75 рублей
...
Задание № 6 (sam06.py)
Выведите на экран таблицу умножения для чётных чисел от 2 до 8.
Пример вывода:
2 x 1 = 2
2 x 2 = 4
...
4 x 1 = 4
4 x 2 = 8
...
Для решения задачи нужно использовать вложенные циклы.
# цикл для перебора чётных множителейfor i inrange(2, 9, 2):# цикл для перебора вторых множителейfor j inrange(1, 10):print(i, "x", j, "=", i*j)