Цикл 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 i in 1, 2, 3, 'one', 'two', 'three': print(i)
При первых трех итерациях цикла переменная i
будет принимать значение типа int
,
при последующих трех — типа str
.
Функция range
Как правило, циклы for
используются либо для повторения какой-либо последовательности действий
заданное число раз, либо для изменения значения переменной в цикле от некоторого начального значения до некоторого
конечного.
Для повторения цикла некоторое заданное число раз n
можно использовать цикл for
вместе с функцией range
:
for i in range(n): Тело цикла
В качестве n
может использоваться числовая константа, переменная или произвольное арифметическое
выражение (например, 2 ** 10
). Если значение n
равно нулю или отрицательное,
то тело цикла не выполнится ни разу.
Если задать цикл таким образом:
for i in range(a, b): Тело цикла
то индексная переменная i
будеть принимать значения от a
до
,
то есть первый параметр функции range
, вызываемой с двумя параметрами, задает начальное значение индексной
переменной, а второй параметр — значение, которая индексная переменная принимать не будет. Если же
a
≥b
, то цикл не будет выполнен ни разу. Например, для того, чтобы просуммировать значения
чисел от 1 до n
можно воспользоваться следующей программой:
sum = 0 for i in range(1, n + 1): sum += i
В этом примере переменная i
принимает значения 1, 2, ..., n
, и значение переменной
sum
последовательно увеличивается на указанные значения.
Наконец, чтобы организовать цикл, в котором индексная переменная будет уменьшаться,
необходимо использовать функцию range
с тремя параметрами. Первый параметр задает начальное
значение индексной переменной, второй параметр — значение, до которого будет
изменяться индексная переменная (не включая его!), а третий параметр — величину изменения индексной переменной.
Например, сделать цикл по всем нечетным числам от 1 до 99 можно при помощи функции
, а сделать цикл по всем числам от 100 до 1 можно при помощи
.
Более формально, цикл
при d > 0
задает значения
индексной переменной i = a
, i = a + d
, i = a + 2 * d
и так
для всех значений, для которых i < b
. Если же d < 0
, то переменная
цикла принимает все значения i > b
.
Упражнения
03: Ряд - 3
Дано натуральное число n
. Напечатайте все n
-значные нечетные натуральные
числа в порядке убывания.
Ввод | Вывод |
---|---|
1 |
9 7 5 3 1 |
05: Сумма кубов
По данному натуральном n вычислите сумму 13+23+33+...+n3.
Ввод | Вывод |
---|---|
3 |
36 |
06: Факториал
По данному целому неотрицательному n вычислите значение n!.
Ввод | Вывод |
---|---|
5 |
120 |
07: Число сочетаний
По данным целым неотрицательным n и k вычислите значение числа сочетаний из n элементов по k, то есть n!k!(n−k)!.
Ввод | Вывод |
---|---|
5 |
10 |
08: Пингвины
Напишите программу, которая по данному числу n от 1 до 9 выводит на экран n пингвинов. Изображение одного пингвина имеет размер 5×9 символов, между двумя соседними пингвинами также имеется пустой (из пробелов) столбец. Разрешается вывести пустой столбец после последнего пингвина. Для упрощения рисования скопируйте пингвина из примера в среду разработки.
Учтите, что вывод данных на экран производится построчно, а не попингвинно.
Символ обратного слэша “\” в текстовых строках
имеет специальное значение. Чтобы включить в состав текстовой
строки такой символ, его нужно повторить дважды. Например,
для вывода на экран одного такого символа можно использовать
такой код: print("\\")
.
Ввод | Вывод |
---|---|
3 |
_~_ _~_ _~_ |
1 |
_~_ |
09: Флаги
Напишите программу, которая по данному числу n от 1 до 9 выводит на экран n флагов. Изображение одного флага имеет размер 4×4 символов, между двумя соседними флагами также имеется пустой (из пробелов) столбец. Разрешается вывести пустой столбец после последнего флага. Внутри каждого флага должен быть записан его номер — число от 1 до n.
Ввод | Вывод |
---|---|
3 |
+___ +___ +___ |
1 |
+___ |
10: Сумма произведений соседних чисел
По данному натуральному n≥2 вычислите сумму 1×2+2×3+...+(n-1)×n. Ответ выведите в виде вычисленного выражение и его значения в точности, как показано в примере.
Ввод | Вывод |
---|---|
4 |
1*2+2*3+3*4=20 |
2 |
1*2=2 |
11: Четные числа
По данным двум натуральным числам A и B (A≤B) выведите все чётные числа на отрезке от A до B. В этой задаче нельзя использовать инструкцию if.
Ввод | Вывод |
---|---|
1 |
2 4 6 8 10 |
13: Сумма N чисел
Дано несколько чисел. Вычислите их сумму. Сначала вводите количество чисел N, затем вводится ровно N целых чисел. Какое наименьшее число переменных нужно для решения этой задачи?
Ввод | Вывод |
---|---|
3 |
321 |
14: Количество нулей
Дано N чисел: сначала вводится число N, затем вводится ровно N целых чисел. Подсчитайте количество нулей среди введенных чисел и выведите это количество.
Ввод | Вывод |
---|---|
5 |
2 |
15: Диофантово уравнение - 1
Даны числа a, b, c, d. Выведите в порядке возрастания все целые числа от 0 до 1000, которые являются корнями уравнения ax3+bx2+cx+d=0.
Ввод | Вывод |
---|---|
-1 |
1 |
1 |
16: Диофантово уравнение - 2
Даны числа a, b, c, d, e. Подсчитайте количество таких целых чисел от 0 до 1000, которые являются корнями уравнения (ax3+bx2+cx+d)/(x-e)=0, и выведите их количество.
Ввод | Вывод |
---|---|
1 |
1 |
1 |
0 |
17: Замечательные числа - 1
Найдите и выведите все двузначные числа, которые равны удвоенному произведению своих цифр.
Программа не требует ввода данных с клавиатуры, просто выводит список искомых чисел.
18: Замечательные числа - 2
Квадрат трехзначного числа оканчивается тремя цифрами, равными этому числу. Найдите и выведите все такие числа.
Программа не требует ввода данных с клавиатуры, просто выводит список искомых чисел.
19: Замечательные числа - 3
Дано натуральное число n. Выведите в порядке возрастания все трехзначные числа, сумма цифр которых равна n.
Ввод | Вывод |
---|---|
3 |
102 |
20: Лесенка
По данному натуральному n≤9 выведите лесенку из n ступенек, i-я ступенька состоит из чисел от 1 до i без пробелов.
Ввод | Вывод |
---|---|
3 |
1 |
21: Замечательные числа - 4
Даны два четырёхзначных числа A и B. Выведите все четырёхзначные числа на отрезке от A до B, запись которых является палиндромом.
Ввод | Вывод |
---|---|
1600 |
1661 |
22: Замечательные числа - 5
Даны два четырёхзначных числа A и B. Выведите в порядке возрастания все четырёхзначные числа на отрезке от A до B, запись которых содержит ровно три одинаковые цифры.
Ввод | Вывод |
---|---|
1900 |
1911 |
23: Остатки
Даны целые неотрицательные числа a, b, c, d, при этом 0≤c<d. Выведите в порядке возрастания все числа от a до b, которые дают остаток c при делении на d.
В этой задаче нельзя использовать инструкцию if, операторы сравнения
(<
и т.д.), должен быть только один цикл.
Ввод | Вывод |
---|---|
1 |
1 3 |
1 |
4 |
24: Сумма факториалов
По данному натуральном n вычислите сумму 1!+2!+3!+...+n!. В решении этой задачи можно использовать только один цикл.
Ввод | Вывод |
---|---|
3 |
9 |
25: Треугольная последовательность
Дана монотонная последовательность, в которой каждое натуральное число k встречается ровно k раз: 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, ...
По данному натуральному n выведите первые n членов этой последовательности. Попробуйте обойтись только одним циклом for.
Ввод | Вывод |
---|---|
2 |
1 2 |
5 |
1 2 2 3 3 |
26: Потерянная карточка
Для настольной игры используются карточки с номерами от 1 до N. Одна карточка потерялась. Найдите ее, зная номера оставшихся карточек.
Дано число N, далее N-1 номер оставшихся карточек (различные числа от 1 до N). Программа должна вывести номер потерянной карточки.
Для самых умных – массивами и аналогичными структурами данных пользоваться нельзя.
Ввод | Вывод |
---|---|
5 |
5 |
4 |
1 |
27*: Домино
Рассмотрим N-домино. В таком домино каждая костяшка состоит из двух половинок, на каждой из которых нарисовано от 0 до N точек. Полный комплект костяшек такого домино содержит все возможные костяшки, каждую по одному разу. Например, для N=2 в комплект войдут следующие костяшки: (0,0), (0,1), (0,2), (1,1), (1,2) и (2,2). По заданному N (1≤N≤30) определите, сколько всего точек изображено на всех костяшках полного комплекта N-домино.
Ввод | Вывод |
---|---|
2 |
12 |
28*: Кинотеатр
X мальчиков и Y девочек пошли в кинотеатр и купили билеты на подряд идущие места в одном ряду. Напишите программу, которая выдаст, как нужно сесть мальчикам и девочкам, чтобы рядом с каждым мальчиком сидела хотя бы одна девочка, а рядом с каждой девочкой — хотя бы один мальчик.
Программа получает на вход два числа X и Y (оба числа натуральные, не превосходящие 100).
Выведите какую-нибудь строку, в которой будет ровно X символов B
(обозначающих мальчиков) и
Y символов G
(обозначающих девочек), удовлетворяющую условию задачи. Пробелы между символами выводить не нужно.
Если рассадить мальчиков и девочек согласно условию задачи невозможно, выведите строку NO SOLUTION
.
Ввод | Вывод |
---|---|
5 |
BGBGBGBGBG |
5 |
BGBGBBGB |
100 |
NO SOLUTION |
29*: Транспортные расходы
Необходимо заказать транспорт для перевозки N человек. Заказывать можно автобусы и такси. В каждый автобус можно посадить не более 50 человек, в каждое такси — не более 4 человек. Стоимость заказа автобуса составляет A рублей, такси — B рублей (разумеется, A \gt B).
Определите, какое количество автобусов и такси нужно заказать, чтобы потратить как можно меньшую сумму денег.
Программа получает на вход три целых числа: N, A, B (1 \le N \le 10^5, 1 \le B \lt A \le 1000).
Выведите два числа — количество автобусов и количество такси для заказа в оптимальном случае. Если возможных ответов несколько, выведите любой.
Ввод | Вывод |
---|---|
4 |
0 1 |
30*: Скорая помощь
Бригада скорой помощи выехала по вызову в один из отделенных районов. К сожалению, когда диспетчер получил вызов, он успел записать только адрес дома и номер квартиры K_1, а затем связь прервалась. Однако он вспомнил, что по этому же адресу дома некоторое время назад скорая помощь выезжала в квартиру K_2, которая расположена в подъезде P_2 на этаже N_2. Известно, что в доме M этажей и количество квартир на каждой лестничной площадке одинаково. Напишите программу, которая вычилсяет номер подъезда P_1 и номер этажа N_1 квартиры K_1.
Программа получает на вход пять положительных целых чисел K_1, M, K_2, P_2, N_2. Все числа не превосходят 1000.
Выведите два числа P_1 и N_1. Если входные данные не позволяют однозначно определить P_1 или N_1, вместо соответствующего числа напечатайте 0. Если входные данные противоречивы, напечатайте два числа –1 (минус один).
Ввод | Вывод |
---|---|
89 |
2 3 |
11 |
0 1 |
3 |
-1 -1 |