1forsideinrange(4):# 4 стороны квадрата2robot.forward(30)# вперед на 30 см3robot.turn_right(90)# поворот на 90°
⚖️ Сравнение типов циклов
Критерий
WHILE
DO-WHILE
FOR
Проверка условия
До выполнения
После выполнения
Автоматически
Минимум выполнений
0 раз
1 раз
0 раз
Счетчик
Ручной
Ручной
Автоматический
Применение
Неизвестное число
Минимум 1 раз
Точное число
🎯 Правило выбора:
Знаем точное количество → FOR
Нужно выполнить минимум 1 раз → DO-WHILE
Условие может быть ложным сразу → WHILE
🛠️ Практические примеры
🛤️ Следование по линии
Задача: Робот должен ехать по черной линии
1# Основной цикл программы 2whileTrue:# бесконечный цикл 3color=color_sensor.value() 4 5ifcolor=="black":# на линии 6left_motor.run(50) 7right_motor.run(50) 8elifcolor=="white":# справа от линии 9left_motor.run(30)# левый медленнее10right_motor.run(70)# правый быстрее
1sorted_count=0 2 3whilesorted_count<10:# пока не отсортировали все 4# Найти шарик 5whilenotobject_detected(): 6robot.search_pattern() 7 8# Определить цвет 9color=color_sensor.value()1011# Отнести в нужный контейнер12ifcolor=="red":13robot.move_to_red_box()14elifcolor=="blue":15robot.move_to_blue_box()16elifcolor=="green":17robot.move_to_green_box()1819robot.drop_object()20sorted_count+=1# увеличить счетчик
🏃 Патрулирование территории
Задача: Робот патрулирует по заданному маршруту
1waypoints=[(0,0),(100,0),(100,100),(0,100)]# координаты точек 2 3forpatrol_roundinrange(5):# 5 кругов патрулирования 4forpointinwaypoints:# по каждой точке маршрута 5robot.move_to(point) 6 7# Сканирование в каждой точке 8forangleinrange(0,360,45):# поворот с шагом 45° 9robot.turn_to(angle)10ifobstacle_detected():11robot.alert("Obstacle found!")1213robot.return_to_base()
1# O(n³) - очень медленно для больших n!2foriinrange(n):3forjinrange(n):4forkinrange(n):5do_something()
⚡ Оптимизация циклов
1. Минимизация операций в теле цикла:
1# ❌ Плохо - вычисление в каждой итерации2foriinrange(100):3result=expensive_calculation()# медленная операция4robot.move(result)56# ✅ Хорошо - вычисление один раз7result=expensive_calculation()8foriinrange(100):9robot.move(result)
2. Выбор правильного условия выхода:
1# ❌ Плохо - лишние проверки 2whileTrue: 3sensor_value=sensor.read() 4ifsensor_value>threshold: 5break 6robot.move() 7 8# ✅ Хорошо - прямое условие 9sensor_value=sensor.read()10whilesensor_value<=threshold:11robot.move()12sensor_value=sensor.read()
🛠️ Практическая работа
📋 Задания по уровням
🟢 Базовый уровень:
Создать блок-схему для робота, который: