К содержанию

Анатолий
Анатольевич
Eфремов

Цикл for


Цикл с параметром

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

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


Пример:

for color in 'red', 'green', 'blue':
     print(color)

В этом примере в качестве множества значений используется список цветов. Переменная color последовательно принимает значения 'red', 'green', 'blue'.


Пример:

Выведем на экран квадраты первых пяти простых чисел.

for i in 2, 3, 5, 7, 11:
     print(i ** 2)


Функция range



Функция range()

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

Пример:

Чтобы вывести на экран числа от 0 до n - 1, можно использовать цикл for вместе с функцией range():

for i in range(n):
     print(i)

В качестве n может использоваться числовая константа или переменная. Если значение n равно нулю или отрицательное, то тело цикла не выполнится ни разу.

Функция range() с двумя параметрами

Если требуется задать цикл от некоторого числа a до некоторого числа b, то можно использовать функцию range() с двумя параметрами:

for i in range(a, b):
     print(i)

Индексная переменная i будет принимать значения от a до b - 1, то есть первый параметр функции range(), вызываемой с двумя параметрами, задаёт начальное значение индексной переменной, а второй параметр — значение, которое индексная переменная принимать не будет. Если же b⩽a, то цикл не будет выполнен ни разу.

Пример:

Чтобы просуммировать значения чисел от a до b можно воспользоваться следующей программой:

s = 0
for i in range(a, b):
     s += i

В этом примере переменная i принимает значения от a до b - 1, и значение переменной s последовательно увеличивается на указанные значения.

Функция range() с тремя параметрами

Наконец, чтобы организовать цикл, в котором индексная переменная будет уменьшаться, необходимо использовать функцию range с тремя параметрами. Первый параметр задает начальное значение индексной переменной, второй параметр — значение, до которого будет изменяться индексная переменная (не включая его!), а третий параметр — величину изменения индексной переменной.

Более формально, цикл for i in range(a, b, d) при d > 0 задает значения индексной переменной i = a, i = a + d, i = a + 2 * d и так для всех значений, для которых i < b.

Если же d < 0, то переменная цикла принимает значения i = a, i = a - |d|, i = a - 2 * |d| и так для всех значений, для которых i > b.

Пример:

Cделать цикл по всем числам от 100 до 1 можно при помощи следующей команды

range(100, 0, -1)



Задача 1

Ряд

Даны два целых числа A и B (при этом A ⩽ B). Выведите все числа от A до B включительно.

Входные данные

Вводятся два целых числа, не превосходящие 200 по абсолютному значению.

Выходные данные

Выведите ответ на задачу.

Примеры

Ввод Вывод
1
10
1 2 3 4 5 6 7 8 9 10

ОТВЕТ:
a = int(input())
b = int(input())
for i in range(a, b + 1):
     print(i)



Задача 2

Ряд — 2

Даны два целых числа A и B. Выведите все числа от A до B включительно в порядке возрастания, если A < B, или в порядке убывания в противном случае.

Входные данные

Вводятся два целых числа, не превосходящих 200 по абсолютному значению.

Выходные данные

Выведите ответ на задачу.

Примеры

Ввод Вывод
179
179
179

Ввод Вывод
1
10
1 2 3 4 5 6 7 8 9 10

Ввод Вывод
10
1
10 9 8 7 6 5 4 3 2 1

ОТВЕТ:
a = int(input())
b = int(input())
if a < b:
     for i in range(a, b + 1):
          print(i)
elif a > b:
     for i in range(a, b - 1, -1):
          print(i)
else:
     print(a)



Задача *

Цифры числа

Дано 10-значное число. Выведите все цифры этого числа в обратном порядке по одной.

Входные данные

На вход подаётся натуральное 10-значное число.

Выходные данные

Выведите ответ на задачу. В качестве разделителя между цифрами можно использовать переводы строки и пробелы.

Примеры

Ввод Вывод
1234567890 0 9 8 7 6 5 4 3 2 1

Видеоразбор

ОТВЕТ:
n = int(input())
for i in range(10):
     print(n % 10)
     n = n // 10



Задача 3

Диофантово уравнение

Даны числа a, b, c, d. Выведите в порядке возрастания все целые числа от 0 до 1000 включительно, которые являются корнями уравнения a ⋅ x3 + b ⋅ x2 + c ⋅ x + d = 0.

Входные данные

Вводятся целые числа a, b, c и d. Все числа не превосходят по модулю 30000.

Выходные данные

Выведите ответ на задачу. Если в указанном промежутке нет корней уравнения, то ничего выводить не нужно.

Примеры

Ввод Вывод
-1
1
-1
1
1

Ввод Вывод
1
1
1
1
 

ОТВЕТ:
a = int(input())
b = int(input())
c = int(input())
d = int(input())
for x in range(1001):
     if a * x ** 3 + b * x ** 2 + c * x + d == 0:
          print(x)



Задача 4

Факториал

По данному целому неотрицательному n вычислите значение n!.

Входные данные

Вводится число n (0 ⩽ n ⩽ 15).

Выходные данные

Выведите ответ на задачу.

Примеры

Ввод Вывод
3 6

ОТВЕТ:
n = int(input())
x = 1
for i in range(1, n + 1):
     x = x * i
print(x)



Задача *

Остатки

Даны целые неотрицательные числа a, b, c, d, при этом 0 ⩽ c < d. Выведите в порядке возрастания все числа от a до b, которые дают остаток c при делении на d.

В этой задаче нельзя использовать инструкцию if, операторы сравнения (< и т.д.), должен быть только один цикл.

Входные данные

На вход подаются четыре строки, в каждой из которых написано по одному неотрицательному целому числу — a, b, c, d. Все числа не превосходят 2 ⋅ 109, 0 ⩽ c < d.

Выходные данные

Выведите ответ на задачу.

Примеры

Ввод Вывод
2
5
0
2
2 4

Ввод Вывод
5
5
0
5
5  

Видеоразбор

ОТВЕТ:
a = int(input())
b = int(input())
c = int(input())
d = int(input())
start = (a - c + d - 1) // d * d + c
for i in range(start, b + 1, d):
     print(i)



Задача 5

Четные числа

По данным двум натуральным числам A и B (A ⩽ B) выведите все чётные числа на отрезке от A до B. В этой задаче нельзя использовать инструкцию if.

В этой задаче нельзя использовать инструкцию if, операторы сравнения (< и т.д.), должен быть только один цикл.

Входные данные

Вводятся два натуральных числа A и B.

Выходные данные

Выведите ответ на задачу.

Примеры

Ввод Вывод
1
10
2 4 6 8 10

ОТВЕТ:
a = int(input())
b = int(input())
start = (a + 1) // 2 * 2
for i in range(start, b + 1, 2):
     print(i)



Примеры применения цикла for



Рассмотрим варианты применения цикла for на примерах задач.


Задача. Числа, не делящиеся на три

Выведите все числа от 1 до 99, которые не делятся на 3.

Решение

for i in range(1, 100):
     if i % 3 != 0:
          print(i)


Задача. Сумма n чисел

Необходимо вывести на экран сумму n чисел. В первой строке входных данных содержится число n — количество чисел. В следующих n строках содержатся сами числа.

Решение

n = int(input())
s = 0
for i in range(n):
     a = int(input())
     s = s + a
print(s)


Задача. Минимум из n чисел

Необходимо вывести на экран минимальное из n чисел. В первой строке входных данных содержится число n — количество чисел. В следующих n строках содержатся сами числа.

Решение

n = int(input())
m = int(input())
for i in range(n - 1):
     a = int(input())
     if a < m:
          m = a
print(m)

Это решение можно немного упростить с помощью функции min:

n = int(input())
m = int(input())
for i in range(n - 1):
     m = min(m, int(input()))
print(m)

Пусть известно, что все числа, которые подаются на вход, не превосходят какой-либо константы. Например, 109. Тогда можно не считывать отдельно первое из чисел:

n = int(input())
m = 10 ** 9
for i in range(n):
     m = min(m, int(input()))
print(m)



Задача 6

Количество нулей

Дано несколько чисел. Подсчитайте, сколько из них равны нулю, и выведите это количество.

Входные данные

Сначала вводится число n, затем вводятся ровно n целых чисел. Все числа во входных данных целые неотрицательные, не превосходящие 30000.

Выходные данные

Выведите ответ на задачу.

Примеры

Ввод Вывод
5
0
7
0
2
2
2

ОТВЕТ:
n = int(input())
a = 0
b = 0
for i in range(n):
     b = int(input())
     if b == 0:
          a += 1
print(a)



Задача *

Делители

По данному натуральному числу выведите все его натуральные делители в порядке возрастания.

Входные данные

На вход подаётся единственное натуральное число n (n ⩽ 1000).

Выходные данные

Выведите все делители числа в порядке возрастания. Делители можно выводить на одной строке, разделяя пробелом, или на разных строках.

Примеры

Ввод Вывод
10 1 2 5 10

Видеоразбор

ОТВЕТ:
n = int(input())
for d in range(1, n + 1):
     if n % d == 0:
          print(d)



Задача *

Лесенка

По данному натуральному числу n выведите лесенку из n ступенек, i-я ступенька состоит из чисел от 1 до i без пробелов.

Входные данные

На вход подаётся натуральное число n (n ⩽ 9).

Выходные данные

Выведите ответ на задачу.

Примеры

Ввод Вывод
3 1
12
123

Видеоразбор

ОТВЕТ:
n = int(input())
s = 0
for i in range(1, n + 1):
     s = s * 10 + i
     print(s)



Задача *

Сумма произведений соседних чисел

По заданной последовательности a1, a2, ..., an чисел вычислите сумму a1 ⋅ a2 + a2 ⋅ a3 + ⋯ + an - 1 ⋅ an.

Входные данные

Первая строка входных данных содержит число n ⩾ 2. В следующих n строках вводится по одному числу. В i + 1 строке содержится значение i-‍того элемента последовательности. Все числа во входном файле натуральные, не превосходящие 100.

Выходные данные

Выведите ответ на задачу.

Примеры

Ввод Вывод
4
2
3
1
5
14

Видеоразбор

ОТВЕТ:
n = int(input())
s = 0
prev = int(input())
for i in range(n - 1):
     a = int(input())
     s += a * prev
     prev = a
print(s)



Задача 7

Сумма факториалов

По данному натуральном n вычислите сумму 1! + 2! + 3! + ... + n!. В решении этой задачи можно использовать только один цикл.

Входные данные

Вводится натуральное число n, не превосходящее 30.

Выходные данные

Выведите ответ на задачу.

Примеры

Ввод Вывод
3 9

ОТВЕТ:
n = int(input())
prev = 1
s = 0
for i in range(1, n + 1):
     prev *= i
     s += prev
print(s)