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 и выведите её на экран. Число n вводится пользователем.
Первый вариант решения:
#ввод числа 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
?
до
x
n-1. В строке номер
x проверяем, является ли значение в 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. Так как первое значение этой переменной будет равно
x и шаг изменения значения равен двум, то с помощью цикла будем перебирать только чётные целые числа.
Пример № 2 (ex02.py)
Создайте калькулятор расчёта денежных вкладов. Пользователь вводит начальную сумму, процент годовых и количество лет. Размер вклада за каждый год рассчитывается по формуле:
\[ вклад = вклад * (1 + \frac{процент}{100}) \]
Программа выводит размер вклада за каждый год.
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
?
будет принимать значения от 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.
Задание № 3 (sam03.py)
Даны два целых числа a и b. Найти сумму всех целых чисел от a до b включительно.
Пример работы программы:
a: 10
b: 25
Ответ: 280
Задание № 4 (sam04.py)
Дано целое число n (n > 0). Найти квадрат данного числа, используя для его вычисления следующую формулу:
\[ n^2=1+3+5+...+(2n-1) \]
range() выдала нужную последовательность, конечное значение должно быть равно \(2n\) а шаг - равен двум.
Задание № 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
...