Занятие № 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(<конец>) #от 0 до <конец> - 1
range(<начало>, <конец>) #от <начало> до <конец>-1
range(<начало>, <конец>, <шаг>) #от <начало> до <конец>-1 с шагом <шаг>
Рассмотрим использование функции 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
...