Модуль 3
Циклы: миссия по путевым точкам
3 блок(ов) теории · 10 заданий · 150 баллов
Цикл — это блок кода, который программа выполняет много раз подряд; один повтор тела называется итерацией. Когда число повторов известно заранее, берут for с range: заголовок for i in range(3): выполняет тело три раза, и на каждой итерации i принимает очередное значение — 0, 1, 2. range перебирает целые числа от левой границы до правой, правую не включая: range(1, 10, 2) — это 1, 3, 5, 7, 9, а range(3, -1, -1) — обратный отсчёт 3, 2, 1, 0 (третий аргумент — шаг). for ходит и по готовой последовательности: for point in points на каждой итерации даёт очередной элемент списка points.
Результат по итерациям собирает аккумулятор — переменная, созданная до цикла и обновляемая в теле: total = 0.0 до цикла, total = total + seg в теле — и после цикла в total лежит сумма всех сегментов. Так же копят список: calls = [] до цикла, calls.append(f"T-{i}") в теле — метод append дописывает элемент в конец. Точка маршрута — кортеж, пара значений (x, y); запись x, y = point раскладывает кортеж в две переменные. Функция enumerate на каждой итерации даёт пару «номер, значение»: for i, v in enumerate(cell_voltages) — обход списка вместе с индексами. Длину списка возвращает len, а квадратный корень — math.sqrt из стандартной библиотеки: строка import math подключает её, и длина сегмента между точками считается теоремой Пифагора — math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2).
while повторяет тело, пока условие истинно, — его берут, когда число итераций заранее неизвестно: «поднимаемся, пока высота меньше 20». Каркас while-цикла — четыре шага: инициализация переменной условия до цикла; проверка условия перед каждой итерацией; тело; изменение переменной условия в теле. Пропущенная инициализация даёт NameError — имя ещё не создано; пропущенное изменение оставляет условие навсегда истинным — об этом warning ниже.
Досрочный выход: break прекращает весь цикл, continue — только текущую итерацию: остаток тела пропускается и начинается следующий виток. Выходом из цикла служит и return изнутри тела — функция завершается вместе с циклом; так пишут поиск первого неподходящего значения. Особый случай — while True: условие всегда истинно, поэтому без break или return в теле такой цикл не заканчивается никогда.
Числа модуля — с настоящего дрона: «Модуль» летает на LiPo 6S — шесть банок по 3.7 В, всего 22.2 В; телеметрия присылает напряжение каждой банки, и слабой считается банка ниже 3.3 В. Резерв АКБ — 20% заряда: ниже опускаться нельзя, сколько бы циклов «взлёт — посадка» ни осталось. Маршрут миссии — список путевых точек в метрах: дрон проходит по очереди сегменты между соседними точками, и длина маршрута — сумма длин сегментов.
Задания
0/10 заданий · 0/150 баллов
1. Сколько раз выполнится тело цикла
10 балл(ов)Три цикла из бортовых сценариев: for i in range(1, 10, 2) — перебор с шагом; for i in range(3) — три витка «по расписанию»; while battery > 20 при battery = 100, если в теле заряд не меняется. Выберите вариант, где верно указано число итераций каждого цикла и назван бесконечный.