Вопросы по теме «Циклы и условия»

Проверь себя · 1/3разбор после ответа
Какой фрагмент while вероятнее всего приведёт к бесконечному циклу, если список events непустой?

for, while, if/elif/else, break, continue — управление потоком выполнения программы. Задачи на циклы проверяют умение итерироваться по сложным структурам, обрабатывать граничные случаи и писать читаемую логику. Часто дают задачу, где нужно обойти вложенные данные или реализовать несложный алгоритм.

Всего в этом разделе 20 вопросов. Каждый — с правильным ответом и кратким разбором теории. Разбито на 4 части по 5 вопросов.

Коллекции и структуры данныхГенераторы списков и встроенные функцииИсключения и отладкаРабота с файлами: JSON и CSVФункции и аргументыИтераторы и генераторыNumPy: основыPandas и DataFrameСинтаксис и типы данных

Вопросы 15 из 20

1Нужно пройти по дням 1..7 включительно. Какой вызов `range()` даст именно эти значения?
A`range(1, 8)`: даёт значения 1..7, верхняя граница `8` не включается
B`range(0, 7)`: даёт значения 0..6, нижняя граница `0` включена, верхняя `7` нет
C`range(7)`: даёт значения 0..6, счёт начинается с нуля, а нужны 1..7
D`range(1, 7)`: даёт значения 1..6, верхняя граница `7` не включается
Ответ: В `range(start, stop)` верхняя граница не включается, поэтому `stop` берут на 1 больше нужного.

Чтобы получить значения 1..7, нужно задать верхнюю границу равной 8: `range(1, 8)`. Вызов `range(1, 7)` даст 1..6, `range(7)` и `range(0, 7)` дадут 0..6. Это типичная ошибка «на 1» при циклах и окнах: правую границу часто забывают увеличить.

Подробный разбор →
2Чему будет равно `s` после выполнения кода: `s = 0`; цикл `for x in [1, 2, 3, 4]:`; внутри при `if x == 3: break`, иначе выполняется `s += x`?
AЗначение `0`: цикл прервётся ещё до первой итерации, элементы списка добавиться не успеют
BЗначение `1`: после прибавления первого элемента сработает выход из цикла, остановка `s` на единице
CЗначение `6`: оператор `break` не остановит цикл, поэтому в `s` войдут все элементы списка целиком
DЗначение `3`: `s` успеет получить два первых элемента, а на тройке цикл прервётся через `break`
Ответ: `break` завершает весь цикл целиком, поэтому элементы после срабатывания условия не обрабатываются.

Сначала `s` увеличится на 1, затем на 2 — получится 3. Когда `x` станет равным 3, сработает `break`, и цикл завершится, не добавив 3 и 4. Итог: `s` равно 3. Если бы вместо `break` стоял `continue`, то 3 был бы пропущен, но 4 успел бы добавиться, и `s` стал бы равен 7.

Подробный разбор →
3Что будет в списке после кода: `nums = []`; затем цикл `for i in range(3):`; внутри выполняется `nums.append(i)`?
A`[1, 2, 3]`: три значения, начиная с единицы и до тройки включительно
B`[2, 1, 0]`: обратный порядок от двойки до нуля без сортировки
C`[0, 1, 2]`: три значения от нуля до двух, верхняя граница `3` не включается
D`[0, 1, 2, 3]`: четыре значения от нуля до тройки включительно
Ответ: `range(3)` генерирует значения 0, 1, 2 — именно они попадут в список.

Цикл `for i in range(3):` пройдёт по трём значениям: 0, 1, 2 — это полуинтервал `[0, 3)`, верхняя граница не включается. На каждой итерации выполняется `nums.append(i)`, поэтому итоговый список — `[0, 1, 2]`. Чтобы получить `[1, 2, 3]`, нужен `range(1, 4)`.

Подробный разбор →
4Есть список оплат по заказам `amounts = [0, 100, 50, 0]`. Код: `cnt = 0`; `for a in amounts:`; если `if a > 0:` то `cnt += 1`. Чему равен `cnt`?
A4
B1
C0
D2
Ответ: Частый паттерн: пройти `for` по значениям и посчитать количество элементов, удовлетворящее условию `if`.

Положительные оплаты в списке — 100 и 50. Для них условие `a > 0` истинно, поэтому `cnt` увеличится дважды. Нули не увеличат счётчик. Итог: 2.

Подробный разбор →
5В цикле по списку заказов вы хотите пропустить невалидную запись и продолжить обработку остальных. Какую инструкцию использовать внутри цикла?
AИспользовать `break`: цикл завершится и оставшиеся записи обработаны не будут совсем
BИспользовать `return`: немедленный выход из текущей функции вместе со всем циклом сразу
CИспользовать `continue`: пропускает текущую итерацию и переходит к следующей записи цикла
DИспользовать `pass`: инструкция бездействует, и выполнение продолжится по телу той же итерации
Ответ: `continue` пропускает текущую итерацию и переходит к следующей, не завершая весь цикл.

`break` завершит цикл целиком, и оставшиеся записи не будут обработаны. `return` выйдет из функции и тоже прервёт цикл. `pass` сам по себе ничего не делает: если после него в теле цикла идёт другой код, он продолжит выполняться для текущей итерации. Для сценария «пропустить и идти дальше» подходит именно `continue`, который завершает текущую итерацию и переходит к следующей.

Подробный разбор →
1234

Хотите тренировать интерактивно?

В приложении — таймер, прогресс, стрики и 1700+ вопросов по всем темам.

Тренировать Python в Telegram

Другие темы: Python

Коллекции и структуры данныхГенераторы списков и встроенные функцииИсключения и отладкаРабота с файлами: JSON и CSVФункции и аргументыИтераторы и генераторыNumPy: основыPandas и DataFrameСинтаксис и типы данных