Программирование циклов на Python
Привет! Представь: тебе нужно отправить поздравление 50 друзьям. Можно копировать текст 50 раз руками. А можно написать программу, которая сделает это за секунду. Сегодня мы научимся заставлять компьютер делать рутинную работу за нас!
Циклы — это когда компьютер делает скучную работу, а ты отдыхаешь
Что такое цикл?
Оператор цикла — это команда в программе, которая говорит: «Повторяй эти действия, пока я не скажу стоп».
💡 Зачем нужны циклы?
Циклы экономят время и код. Вместо того чтобы писать одну и ту же команду 100 раз, мы пишем цикл — и компьютер сам повторит её столько, сколько нужно.
🎮 Пример из жизни
Качаешь персонажа в игре? Каждый день одни и те же действия: зашёл, выполнил квест, получил награду. Программисты игр используют циклы, чтобы автоматизировать повторяющиеся события!
🔄 В Python два основных цикла
- while (цикл-ПОКА) — повторяем, пока условие истинно
- for (цикл-ДЛЯ) — повторяем известное количество раз
📌 Когда что использовать?
- for — когда знаем количество повторений
- while — когда не знаем или проверяем условие
1️⃣ Цикл WHILE — повторяем, пока условие верно
Сейчас мы узнаем, как заставить программу повторять действия, пока выполняется какое-то условие.
Цикл while: бежим, пока не достигнем цели
🔍 Синтаксис цикла while
while условие:
# действия, которые повторяются
# пока условие истинно
Пока условие = True, программа крутит цикл. Как только условие становится False — цикл останавливается.
📝 Пример 1: Рисуем круги
Нарисуем ряд кругов с помощью библиотеки turtle:
import turtle
x = 20
while x <= 620:
turtle.penup()
turtle.goto(x, 0)
turtle.pendown()
turtle.circle(20)
x = x + 40
turtle.done()
Что происходит? Начинаем с x = 20. Пока x ≤ 620, рисуем круг и сдвигаемся на 40 пикселей вправо. Когда x станет больше 620 — стоп!
💡 Попробуй сам: Измени радиус на 30 или сделай вертикальный ряд кругов!
📝 Пример 2: Алгоритм Евклида (НОД)
Найдём наибольший общий делитель двух чисел — это как найти самую большую общую часть двух Lego-конструкций:
x = int(input('Введите первое число: '))
y = int(input('Введите второе число: '))
while x != y:
if x > y:
x = x - y
else:
y = y - x
nod = x
print(f'НОД = {nod}')
Логика: Вычитаем меньшее из большего, пока числа не станут равны. Это и есть НОД!
🎯 Проверь: НОД(123, 12) = ? НОД(450, 180) = ? НОД(500, 125) = ?
📝 Пример 3: Деление без деления
Как поделить числа, используя только вычитание? Как в начальной школе: сколько раз вычтем делитель из делимого!
x = int(input('Введите делимое: '))
y = int(input('Введите делитель: '))
r = x # остаток
q = 0 # частное
while r >= y:
r = r - y
q = q + 1
print(f'Частное: {q}')
print(f'Остаток: {r}')
Пример: 25 ÷ 4 = 6 (остаток 1)
📝 Пример 4: Считаем числа, оканчивающиеся на 3
Программа для обработки списка чисел (сколько их — неизвестно, ноль = конец ввода):
count = 0
print('Вводите числа (0 для завершения)')
a = int(input('Число: '))
while a != 0:
if a % 10 == 3: # последняя цифра = 3?
count = count + 1
a = int(input('Следующее число (или 0): '))
print(f'Чисел, оканчивающихся на 3: {count}')
💡 Попробуй: Измени программу так, чтобы считать числа, кратные 3 (делящиеся на 3 без остатка).
🔄 Цикл WHILE с командой break
Иногда удобнее проверять условие ПОСЛЕ выполнения действий. Для этого используем бесконечный цикл с выходом через break.
Делаем шаг, потом проверяем — пора ли остановиться
🔍 Синтаксис
while True:
# действия
if условие_выхода:
break # выходим из цикла
📝 Пример 5: Концентрические окружности
Рисуем круги от большого к маленькому:
import turtle
r = 200
while True:
turtle.circle(r)
r = r - 5
if r < 10:
break
turtle.done()
📝 Пример 6: Считаем цифры в числе
Сколько цифр в числе 12345? Будем «откусывать» по одной справа:
n = int(input('Введите число: '))
count = 0
while True:
n = n // 10 # убираем последнюю цифру
count = count + 1
if n == 0:
break
print(f'Количество цифр: {count}')
Как работает //? Это целочисленное деление. 12345 // 10 = 1234 (откусили цифру 5).
💡 Усложни задачу: Попробуй посчитать ещё и сумму цифр числа!
📝 Пример 7: График тренировок
Спортсмен бежит каждый день на 10% больше. Когда он пробежит 25 км?
x = 10.0 # начальная дистанция
day = 1
while True:
x = x * 1.1 # +10%
day = day + 1
if x >= 25:
break
print(f'С {day}-го дня спортсмен пробежит 25 км')
2️⃣ Цикл FOR — когда знаем, сколько раз повторять
Сейчас мы узнаем самый удобный цикл — когда точно знаем количество повторений.
Цикл for: когда знаешь, сколько раз повторить
🔍 Синтаксис цикла for
for i in range(start, stop):
# действия повторяются от start до stop-1
Важно: range(1, 5) даст числа 1, 2, 3, 4 (без 5!).
📊 Примеры range()
range(5)→ 0, 1, 2, 3, 4range(1, 6)→ 1, 2, 3, 4, 5range(0, 10, 2)→ 0, 2, 4, 6, 8range(10, 0, -1)→ 10, 9, 8...1
💡 Совет
Цикл for — это твой лучший друг, когда нужно:
- Повторить действие N раз
- Перебрать элементы списка
- Пройтись по строке
📝 Пример 8: 100 случайных кругов
import turtle
import random
for i in range(100):
x = random.randint(0, 640)
y = random.randint(0, 480)
turtle.penup()
turtle.goto(x, y)
turtle.pendown()
turtle.circle(10)
turtle.done()
Каждый круг — в случайном месте! Как конфетти 🎉
📝 Пример 9: Находим все делители числа
n = int(input('Введите число: '))
print(f'Делители числа {n}:')
for i in range(1, n + 1):
if n % i == 0:
print(i)
Что такое делитель? Число, на которое n делится без остатка. У 12 делители: 1, 2, 3, 4, 6, 12.
💡 Усложни: Подсчитай количество делителей. Если их ровно 2 — число простое!
📝 Пример 10: Возведение в степень
Вычислим an без функции pow():
a = float(input('Введите основание: '))
n = int(input('Введите показатель: '))
result = 1
for i in range(n):
result = result * a
print(f'{a} в степени {n} = {result}')
Логика: 2³ = 2 × 2 × 2. Умножаем 3 раза!
📝 Пример 11: Обработка последовательности
Подсчитаем, сколько чисел делятся на 3:
n = int(input('Сколько чисел введёте? '))
count = 0
for i in range(n):
a = int(input(f'Число #{i+1}: '))
if a % 3 == 0:
count = count + 1
print(f'Чисел, кратных 3: {count}')
📝 Пример 12: Считаем буквы в строке
text = input('Введите строку: ')
count = 0
for letter in text:
if letter == 's':
count = count + 1
print(f'Букв "s" в строке: {count}')
💡 Усложни: Посчитай, каких букв больше — "s" или "t"?
3️⃣ Вложенные циклы — цикл внутри цикла!
Сейчас мы узнаем, как создавать сложные повторяющиеся структуры — типа таблицы умножения или шахматной доски.
Вложенные циклы: цикл внутри цикла, как матрёшки
💡 Что такое вложенные циклы?
Вложенный цикл — это цикл внутри другого цикла. Внешний цикл повторяет внутренний!
Представь матрёшек: большая содержит среднюю, средняя — маленькую. Так же работают вложенные циклы.
📝 Пример 13: Прямоугольник из звёздочек
Выведем 5 строк по 10 звёздочек:
for i in range(5): # внешний цикл: 5 строк
for j in range(10): # внутренний: 10 звёздочек
print('*', end='')
print() # переход на новую строку
Результат:
**********
**********
**********
**********
**********
📝 Пример 14: Сетка из кругов
import turtle
y = 10
for i in range(5): # 5 рядов
x = 10
for j in range(8): # 8 кругов в ряду
turtle.penup()
turtle.goto(x, y)
turtle.pendown()
turtle.circle(10)
x = x + 20
y = y + 20
turtle.done()
Получится сетка 5×8 кругов!
🎯 Как это работает?
- Внешний цикл (i) выполняется 5 раз → 5 рядов
- На каждой итерации внешнего цикла внутренний цикл (j) выполняется 8 раз → 8 кругов
- Итого: 5 × 8 = 40 кругов!
🚀 Бонус: Крутые трюки с циклами
🎯 Трюк 1: Обратный отсчёт
for i in range(10, 0, -1):
print(i)
print('Пуск! 🚀')
range(10, 0, -1) идёт от 10 до 1 с шагом -1!
✨ Трюк 2: Перебор строки
word = 'Python'
for letter in word:
print(letter)
Можно перебирать не только числа, но и символы строки!
🔢 Трюк 3: Enumerate для нумерации
fruits = ['яблоко', 'банан', 'киви']
for i, fruit in enumerate(fruits, start=1):
print(f'{i}. {fruit}')
Результат:
1. яблоко
2. банан
3. киви
📌 Самое главное
Выжимка всего, что мы узнали о циклах:
🎯 Проверь себя
Проверь, насколько хорошо ты разобрался в циклах!
Задача 1: Угадай результат
Что выведет этот код?
x = 1
y = 0
while x < 5:
y = y + x
x = x + 1
print(x, y)
💡 Подсказка: Отслеживай значения x и y на каждой итерации!
Задача 2: Найди ошибку в факториале
Программист хотел вычислить факториал (5! = 1×2×3×4×5), но ошибся:
n = int(input('Введите n: '))
f = 0
for i in range(1, n):
f = f * i
print(f)
Что не так? Исправь код!
Задача 3: Бесконечный цикл?
a = 1
b = 2
while a < b:
c = a + b
Что произойдёт при запуске? Почему?
Задача 4: Найди максимум
Напиши программу, которая:
- Вводит целые числа до тех пор, пока не введут 0
- Находит максимальное (наибольшее) из введённых чисел
- Использует цикл
while
Задача 5: Таблица умножения
Напиши программу, которая выводит таблицу умножения на n (от 1 до 10):
Введите n: 5
5 × 1 = 5
5 × 2 = 10
...
5 × 10 = 50
Задача 6: Шахматная доска
Используй вложенные циклы, чтобы нарисовать шахматную доску 8×8 из символов * и пробелов:
* * * *
* * * *
* * * *
* * * *
* * * *
* * * *
* * * *
* * * *
Задача 7: Сумма квадратов
Напиши программу, вычисляющую сумму квадратов первых n чисел:
1² + 2² + 3² + ... + n²
Задача 8: Степени двойки
Выведи таблицу степеней двойки от 2⁰ до 2¹⁰ в формате:
0 → 1
1 → 2
2 → 4
...
10 → 1024
Задача 9: Логическая загадка
Какой из трёх циклов (while, for, или цикл с break) самый универсальный? То есть таким, которым можно заменить два других?
Обсуди с друзьями!
Задача 10: Реальная задача про плитки
После ремонта осталось несколько плиток. Если укладывать по 8 в ряд — остаётся неполный ряд. Если по 9 — тоже неполный ряд, но в нём на 6 плиток меньше, чем при укладке по 8.
Напиши программу, которая найдёт, сколько всего плиток!
Задача 11: Сколько раз выполнится цикл?
Определи, сколько раз выполнится тело цикла:
for i in range(0, 15): ...for i in range(10, 15): ...for i in range(-1, 2): ...for i in range(10, 10): ...
Задача 12: Твоё имя 10 раз
Напиши программу, которая 10 раз выводит на экран твои имя и фамилию.
💪 Практические задания
Попробуй применить полученные знания на практике!
✍️ Задание 1: Вывод имени
Создай программу, которая спрашивает у пользователя его имя и выводит приветствие 5 раз.
Какой цикл лучше использовать — while или for?
🔢 Задание 2: Чётные числа
Напиши программу, которая выводит все чётные числа от 1 до 50.
Подсказка: используй range() с шагом 2!
🎲 Задание 3: Угадай число
Компьютер загадывает число от 1 до 10. Пользователь пытается угадать. Программа продолжает работу, пока число не угадано.
Используй random.randint() и цикл while!
⭐ Задание 4: Треугольник из звёзд
Выведи треугольник:
*
**
***
****
*****
Подсказка: используй вложенные циклы!