Занятие № 4. Решение задач с использованием цикла с известным количеством повторений

Цель: изучить применение цикла for; рассмотреть типовые задачи.

Теория

Цикл с определённым количеством повторений

В общем случае, цикл for используется для перебора элементов некой последовательности. Это могут быть символы в строке, элементы списка или целые числа.

Инструкция цикла for записывается следующим образом:

for <элемент> in <последовательность>:
    <блок инструкций>

Да

Нет

Начало

Остались элементы?

<элемент> = след. элем.

блок инструкций

Конец

Рисунок 1

элемент - переменная цикла. На каждой итерации цикла в переменной цикла будет находится очередной элемент последовательности.

содержит диаграмму с ходом работы цикла for.

Строка - это последовательность символов, значит с помощью цикла for можно перебрать все символы в строке. В следующем примере выведем на экран все символы строки Привет, мир:

for letter in "Привет, мир":
print(letter)
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      
for letter in "Привет, мир":
    print(letter)

На каждой итерации данного цикла в переменной letter будет храниться очередная буква из строки Привет, мир. Этот цикл выполнится раз.

Как Python понимает, какие инструкции находятся в теле цикла?


Создание последовательности целых чисел

Чтобы переменная цикла for принимала значения из последовательности целых чисел, необходимо эту последовательность сгенерировать. Для этого используется функция range().

Функция range() позволяет задавать начальное и конечное значение в последовательности и шаг.

Самый простой вариант использования функции range() - указать только конечное значение.

n = 10
print(list(range(n)))
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      
n = 10
print(list(range(n)))

Функция range(10) сгенерирует последовательность чисел от 0 до 9. Иными словами, создаётся последовательность целых чисел от 0 до n-1.

Технические детали

Функция range() не создаёт всю генерируемую последовательность целиком, а лишь возвращает очередной элемент последовательность по запросу. Чтобы получить всю последовательности целиком, нужно преобразовать результат работы функции range() в список с помощью функции list(). В описании цикла for преобразовывать последовательность в список необязательно. Со списками вы познакомитесь на последующих занятиях.

В функции range() можно указать начальное и конечно значение последовательности:

print(list(range(2, 15)))
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      
print(list(range(2, 15)))

В этом примере будет создана последовательность целых чисел от 2 до 14.

Если указать третий аргумент при вызове функции он будет считаться шагом изменения значения:

print(list(range(2, 15, 2)))
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      
print(list(range(2, 15, 2)))

Все три аргумента должны быть целыми числами, но могут быть как положительными, так и отрицательными числами:

print(list(range(15, 1, -3)))
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      
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)
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      
for i in range(1, 11):
    sq = i ** 2
    print(i, sq)

Функция range(1, 11) создаст последовательность целых чисел от 1 до 10.

Какое число выведется на экран после выполнения следующей программы:

sum_ch = 0
for i in range(4):
    sum_ch = sum_ch + i
print(sum_ch)

Break и continue

В цикле for, как и в цикле while можно использовать инструкцию прерывания цикла break и continue - переход к следующей итерации цикла.

Рассмотрим фрагмент кода:

for i in range(10):
    if i % 2 == 0:
        continue
    print(i)

На экран выведутся числа из диапазона от 1 до .

Примеры

Пример № 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)
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      
#ввод числа 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 будет меняться от до . В строке номер проверяем, является ли значение в 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)
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      
#ввод числа N
n = int(input("Введите n: "))
#переменная хранящая сумму
s = 0
#в функции range задан шаг изменения i
for i in range(2, n, 2):
    print(i)
    s = s + i
print("Ответ:", s)

В этом коде третий аргумент функции range() отвечает за переменной цикла i. Так как первое значение этой переменной будет равно и шаг изменения значения равен двум, то с помощью цикла будем перебирать только чётные целые числа.

Пример № 2 (ex02.py)

Создайте калькулятор расчёта денежных вкладов. Пользователь вводит начальную сумму, процент годовых и количество лет. Размер вклада за каждый год рассчитывается по формуле:

вклад=вклад(1+процент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, "руб.")
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      
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 будут храниться значения типа. Переменная цикла for с именем будет принимать значения от 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)

Задание № 3 (sam03.py)

Даны два целых числа a и b. Найти сумму всех целых чисел от a до b включительно.

Пример работы программы:

a: 10
b: 25
Ответ: 280

Задание № 4 (sam04.py)

Дано целое число n (n > 0). Найти квадрат данного числа, используя для его вычисления следующую формулу:

n2=1+3+5+...+(2n1)


Обратите внимание, что мы находим сумму нечётных чисел от 1 до 2n1.

Чтобы функция 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
...

Для решения задачи нужно использовать вложенные циклы.