# Содержание

Содержание;
Цикл for и перебор объектов;
Функция enumerate;
Функция range (перебор членов арифметической прогрессии);
Упражнения;
A: Ряд — 1;
B: Ряд — 2;
C: Ряд — 3;
D: Ряд — 4;
E: Сумма кубов;
F: Сумма произведений соседних чисел;
G: Факториал;
H: Сумма чисел от 1 до n;
I: Сумма произведений соседних чисел — 2;
J: Четные числа;
K: Флаги;
L: Звездочки;
M: Сумма N чисел;
N: Делители;
O: Количество нулей;
P: Цифры числа;
Q: Замечательные числа — 1;
R: Замечательные числа — 2;
S: Замечательные числа — 3;
T: Лесенка;
U: Замечательные числа — 4;
V: Замечательные числа — 5;
W: Сумма факториалов;
X: Домино;
Y: Треугольная последовательность;
Z: Остатки;
ZA: Транспортные расходы;
ZB: Кривая дракона;
ZC: Магический квадрат;
ZD: Скорая помощь;
ZE: Страусиная ферма;

# Цикл for и перебор объектов

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

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

i = 1
for color in 'red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'violet':
    print(i,'-th color of rainbow is ', color, sep='')
    i += 1

В этом примере переменная color последовательно принимает значения 'red', 'orange' и т.д. В теле цикла выводится сообщение, которое содержит название цвета, то есть значение переменной color, а также номер итерации цикла число, которое сначала равно 1, а потом увеличивается на один (инструкцией i += 1 с каждым проходом цикла).

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

for obj in 1, 2, 3, 'one', 'two', 'three':
    print(obj)

При первых трёх итерациях цикла переменная i будет принимать значение типа int, при последующих трёх — типа str.

# Функция enumerate

Вернёмся к первому примеру. В случаях, когда вместе с элементами нужны также и их индексы, идеоматический подход в питоне выглядит так:

for i, color in enumerate(('red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'violet')):
    print(i+1, '-th color of rainbow is ', color, sep='')
Функция enumerate возвращает пары из порядкового номера элемента начиная с нуля и собственно самого элемента. В данном примере ещё лучше воспользоваться параметром start, тогда нумерация начнётся не с нуля, а с указанного в параметре start значения:
for i, color in enumerate(('red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'violet'), start=1):
    print(i, '-th color of rainbow is ', color, sep='')

# Функция range (перебор членов арифметической прогрессии)

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

Для повторения цикла некоторое заданное число раз n можно использовать цикл for вместе с функцией range:

for i in range(n):
    Тело цикла
Например:
s = 0
for i in range(3):
    print(i, i * i)
    s += i * i
print(s)

В качестве n в range(n) может использоваться числовая константа, переменная или произвольное арифметическое выражение (например, 2 ** 10). Если значение n равно нулю или отрицательное, то тело цикла не выполнится ни разу.

Код выше эквивалентен такому:

s = 0
# Начали
i = 0
print(i, i * i)
s += i
# Ещё раз
i = 1
print(i, i * i)
s += i
# Ещё раз
i = 2
print(i, i * i)
s += i
# Закончили
print(s)

Если задать цикл таким образом:

for i in range(a, b):
    Тело цикла

то индексная переменная i будет принимать значения от a до b - 1, то есть первый параметр функции range, вызываемой с двумя параметрами, задаёт начальное значение индексной переменной, а второй параметр — значение, которая индексная переменная принимать не будет. Если же a ⩾ b, то цикл не будет выполнен ни разу. Например, для того, чтобы просуммировать значения чисел от 1 до n можно воспользоваться следующей программой:

sum = 0
for i in range(1, n + 1):
    sum += i

В этом примере переменная i принимает значения 1, 2, ..., n, и значение переменной sum последовательно увеличивается на указанные значения.

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

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

# Упражнения

A: Ряд — 1

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

1 5
1 2 3 4 5
IDE

B: Ряд — 2

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

5 1
5 4 3 2 1
IDE

C: Ряд — 3

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

 
10000 9801 ... 4 1
IDE

D: Ряд — 4

Дано натуральное число nn. Напечатайте все nn-значные нечетные натуральные числа в порядке убывания.

1
9 7 5 3 1
IDE

E: Сумма кубов

По данному натуральном nn вычислите сумму 13+23+33+...+n31^3+2^3+3^3+...+n^3.

3
36
★★
Это число можно вычислить и без суммирования. Напишите в комментариях чему она равна и почему.
IDE

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

По данному натуральному nn вычислите сумму 1×2+2×3+...+(n1)×n1\times2+2\times3+...+(n-1)\times n.

4
20
2
2
IDE

G: Факториал

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

5
120
★★★
Напишите программу, которая вычисляет 1,000,000! за одну минуту. Не пытайтесь вывести это число (в нём около 5565709 десятичных цифр, и попытка вывода может занять больше 20 минут). Чтобы проверить правильность ответа посмотрите на длину в двоичной записи. Если ответ хранится в переменной x, то x.bit_length() = 18488885.
PS. Функцию factorial из модуля math разумеется нельзя использовать.
★★★★★
Напишите программу, которая вычисляет 1,000,000! за одну... секунду!. Ну ладно, можно за пять :).
IDE

H: Сумма чисел от 1 до n

По данному натуральному n1n\ge1 вычислите сумму 1+2+...+n1+2+...+n. Ответ выведите в виде вычисленного выражение и его значения в точности, как показано в примере.

В этой задаче нельзя использовать if.

4
1+2+3+4=10
1
1=1
IDE

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

По данному натуральному n2n\ge2 вычислите сумму 1×2+2×3+...+(n1)×n1\times2+2\times3+...+(n-1)\times n. Ответ выведите в виде вычисленного выражение и его значения в точности, как показано в примере.

В этой задаче нельзя использовать if.

4
1*2+2*3+3*4=20
2
1*2=2
IDE

J: Четные числа

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

1 10
2 4 6 8 10
IDE

K: Флаги

Напишите программу, которая по данному числу nn от 1 до 9 выводит на экран n флагов. Изображение одного флага имеет размер 4×4 символов, между двумя соседними флагами также имеется пустой (из пробелов) столбец. Разрешается вывести пустой столбец после последнего флага и вообще допускается вывод пробелов в конце строк. Внутри каждого флага должен быть записан его номер — число от 1 до nn.

Символ обратного слэша “\” в текстовых строках имеет специальное значение. Чтобы включить в состав текстовой строки такой символ, его нужно повторить дважды. Например, для вывода на экран одного такого символа можно использовать такой код: print("\\").

3
+___ +___ +___  |1 / |2 / |3 /  |__\ |__\ |__\  |    |    |    
1
+___ |1 / |__\ |   
IDE

L: Звездочки

Дано 10 целых чисел. Считайте каждое из этих чисел и выведите столько символов “*” чему равно это число. Выводите число сразу же после считывания числа.

1 2 3 4 5 6 7 8 9 10
* ** *** **** ***** ****** ******* ******** ********* **********
IDE

M: Сумма N чисел

Дано несколько чисел. Вычислите их сумму. Сначала вводите количество чисел N, затем вводится ровно N целых чисел. Какое наименьшее число переменных нужно для решения этой задачи?

3 1 20 300
321
Какое наименьшее число переменных нужно для решения этой задачи (если не использовать никаких хаков)? Напишите в комментариях сколько и почему.
IDE

N: Делители

По данному натуральному числу n1000n\le 1000 выведите все натуральные делители числа nn в порядке возрастания. Числа нужно выводить в одной строке через пробел (вспомните про параметры функции print).

10
1 2 5 10
IDE

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

Дано N чисел: сначала вводится число N, затем вводится ровно N целых чисел. Подсчитайте количество нулей среди введенных чисел и выведите это количество.

5 0 7 0 2 2
2
IDE

P: Цифры числа

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

1234567890
0987654321
IDE

Q: Замечательные числа — 1

Найдите и выведите все двузначные числа, которые равны удвоенному произведению своих цифр.

Программа не требует ввода данных с клавиатуры, просто выводит список искомых чисел.

IDE

R: Замечательные числа — 2

Квадрат трехзначного числа оканчивается тремя цифрами, равными этому числу. Найдите и выведите все такие числа.

Программа не требует ввода данных с клавиатуры, просто выводит список искомых чисел.

IDE

S: Замечательные числа — 3

Дано натуральное число n. Выведите в порядке возрастания все трехзначные числа, сумма цифр которых равна nn.

3
102 111 120 201 210 300
IDE

T: Лесенка

По данному натуральному n9n\le 9 выведите лесенку из nn ступенек, ii-я ступенька состоит из чисел от 1 до ii без пробелов.

3
1 12 123
IDE

U: Замечательные числа — 4

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

1600 2100
1661 1771 1881 1991 2002
IDE

V: Замечательные числа — 5

Даны два четырёхзначных числа A и B. Выведите в порядке возрастания все четырёхзначные числа на отрезке от A до B, запись которых содержит ровно три одинаковые цифры.

1900 2100
1911 1999 2000 2022
IDE

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

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

3
9
IDE

X: Домино

Рассмотрим NN-домино. В таком домино каждая костяшка состоит из двух половинок, на каждой из которых нарисовано от 0 до NN точек. Полный комплект костяшек такого домино содержит все возможные костяшки, каждую по одному разу. Например, для N=2N=2 в комплект войдут следующие костяшки: (0,0), (0,1), (0,2), (1,1), (1,2) и (2,2). По заданному NN (1N301\le N \le 30) определите, сколько всего точек изображено на всех костяшках полного комплекта NN-домино.

Тесты к этой задаче закрытые.

2
12
IDE

Y: Треугольная последовательность

Дана монотонная последовательность, в которой каждое натуральное число kk встречается ровно kk раз: 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, ...

По данному натуральному nn выведите первые nn членов этой последовательности. Решите задачу при помощи одного цикла for. Операция умножения строки на число также не допускается.

2
1 2
5
1 2 2 3 3
IDE

Z: Остатки

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

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

1 4 1 2
1 3
1 5 0 4
4
IDE

ZA: Транспортные расходы

Необходимо заказать транспорт для перевозки NN человек. Заказывать можно автобусы и такси. В каждый автобус можно посадить не более 50 человек, в каждое такси — не более 4 человек. Стоимость заказа автобуса составляет AA рублей, такси — BB рублей (разумеется, A>BA \gt B).

Определите, какое количество автобусов и такси нужно заказать, чтобы потратить как можно меньшую сумму денег.

Программа получает на вход три целых числа: NN, AA, BB (1N1051 \le N \le 10^5, 1B<A10001 \le B \lt A \le 1000).

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

Тесты к этой задаче закрытые.

4 3 2
0 1
IDE

ZB: Кривая дракона

Кривая дракона — один из наиболее известных фракталов. Она строится так: на первом шаге проводится отрезок из начала координатной плоскости в точку (0; 1). Далее на каждом шаге из конца фрактала повторяется уже нарисованная часть фигуры, повернутая на 90 градусов против часовой стрелки

dragon

По данному числу N1N\ge 1 определите конец кривой дракона после выполнения NN шагов.

Тесты к этой задаче закрытые.

2
1 1
4
2 -2
IDE

ZC: Магический квадрат

Магический квадрат — это таблица 3×3, в каждой из ячеек которой находятся числа от 0 до 9, числа могут повторяться, но сумма чисел в каждой строке и каждом столбце равна одному числу NN.

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

Программа получает на вход одно целое неотрицательное число NN и должна вывести искомое число вариантов.

0
1
1
6
IDE

ZD: Скорая помощь

Бригада скорой помощи выехала по вызову в один из отделенных районов. К сожалению, когда диспетчер получил вызов, он успел записать только адрес дома и номер квартиры K1K_1, а затем связь прервалась. Однако он вспомнил, что по этому же адресу дома некоторое время назад скорая помощь выезжала в квартиру K2K_2, которая расположена в подъезде P2P_2 на этаже N2N_2. Известно, что в доме MM этажей и количество квартир на каждой лестничной площадке одинаково. Напишите программу, которая вычилсяет номер подъезда P1P_1 и номер этажа N1N_1 квартиры K1K_1.

Программа получает на вход пять положительных целых чисел K1K_1, MM, K2K_2, P2P_2, N2N_2. Все числа не превосходят 1000.

Выведите два числа P1P_1 и N1N_1. Если входные данные не позволяют однозначно определить P1P_1 или N1N_1, вместо соответствующего числа напечатайте 0. Если входные данные противоречивы, напечатайте два числа –1 (минус один).

Тесты к этой задаче закрытые.

89 20 41 1 11
2 3
11 1 1 1 1
0 1
3 2 2 2 1
-1 -1
IDE

ZE: Страусиная ферма

На страусиной ферме есть N×MN\times M птиц. Каждому страусу соорудили по загону, установив перегородки так, чтобы они образовывали прямоугольник из NN строк и MM столбцов. Тем самым образуется ровно N×MN\times M квадратных загонов 1×11\times 1.

В один прекрасный осенний день страус Чак, находившийся в нижнем левом загоне, почувствовал острую необходимость отправиться по важным и неотложным страусиным делам. Он начал пробивать себе путь на волю, ломая перегородки. Сначала он сломал правую перегородку и переместился загоном правее. Потом он сломал верхнюю перегородку и переместился вверх. Далее он прокладывал себе путь по такому же принципу: ломая попеременно то правую, то верхнюю перегородку, пока, наконец, не оказался на свободе.

Хозяин, увидев разгром, учиненный Чаком, сильно расстроился. Но делать нечего —надо приводить все в порядок. Он отправил письмо на ближайшую лесопилку, указав, сколько у него осталось перегородок, но забыв при этом указать, сколько ему требуется.

Помогите работникам лесопилки: зная, сколько у хозяина осталось перегородок, определите, каких размеров могла быть ферма.

Программа получает на вход одно число XX, 1X1091\le X\le 10^9 — количество оставшихся перегородок.

Программа должна вывести все возможные варианты размеров фермы, в виде чисел NN и MM, по одному варианту в строке. Порядок вывода вариантов не важен.

9
3 1 2 2
IDE