Вступ до циклів
Уяви, що тобі потрібно написати програму, яка виводить привітання 10 разів. Можна зробити так:
print("Привіт!")
print("Привіт!")
print("Привіт!")
print("Привіт!")
print("Привіт!")
print("Привіт!")
print("Привіт!")
print("Привіт!")
print("Привіт!")
print("Привіт!")
Але що, якщо потрібно вивести привітання 100 або 1000 разів? Писати однакові команди багато разів — не дуже ефективно. Для таких випадків у програмуванні існують цикли.
Циклом називають конструкцію, яка дозволяє виконувати один і той самий блок коду декілька разів. Це як кнопка повтору на програвачі музики, тільки для коду!
Нащо нам цикли?
Цикли використовуються, коли потрібно:
- Виконати однакові дії багато разів
- Опрацювати велику кількість даних
- Повторювати дії, поки не виконається певна умова
- Автоматизувати обчислення, які повторюються
Види циклів в Python
В Python є два основні типи циклів:
- while - виконується, поки умова істинна
- for - виконується для кожного елемента в послідовності
Розглянемо їх на конкретних прикладах:
Цикл while - "Поки"
count = 1
while count <= 5:
print("Цикл виконався", count, "раз(и)")
count = count + 1
Цей код виведе:
Цикл виконався 1 раз(и)
Цикл виконався 2 раз(и)
Цикл виконався 3 раз(и)
Цикл виконався 4 раз(и)
Цикл виконався 5 раз(и)
Цикл for - "Для кожного"
for i in range(1, 6):
print("Цикл виконався", i, "раз(и)")
Цей код виведе такий самий результат, як і попередній:
Цикл виконався 1 раз(и)
Цикл виконався 2 раз(и)
Цикл виконався 3 раз(и)
Цикл виконався 4 раз(и)
Цикл виконався 5 раз(и)
Цикли в реальному світі
Багато процесів у житті також є циклічними:
- Дні тижня повторюються знову і знову
- Ми чистимо зуби щоранку і щовечора
- Тренуємось кожного дня за схожою програмою
- Коли читаємо книгу, ми переглядаємо сторінку за сторінкою
Цикли в програмуванні схожі на цикли в реальному житті - вони дозволяють комп'ютеру повторювати завдання без нашого втручання.
В наступних розділах ми детальніше розглянемо кожен тип циклу і навчимось використовувати їх для розв'язання різноманітних задач.
Цикл while
Цикл while
- один із найпростіших циклів у Python. Його назва походить від англійського слова "while", що означає "поки" або "доки". Цей цикл виконує блок коду, поки задана умова залишається істинною (True
).
Синтаксис циклу while
while умова:
# блок коду, що виконується
# поки умова True
Як це працює:
- Python перевіряє умову.
- Якщо умова
True
- виконується блок коду. - Після виконання блоку коду, Python знову перевіряє умову.
- Кроки 2-3 повторюються, поки умова не стане
False
. - Коли умова стає
False
, цикл завершується і програма продовжується далі.
Простий приклад
count = 1
while count <= 5:
print(count)
count = count + 1
print("Цикл завершено!")
Цей код виведе:
1
2
3
4
5
Цикл завершено!
Що відбувається в коді:
- Створили змінну
count
зі значенням 1. - Цикл
while
перевіряє, чиcount <= 5
(це True для значення 1). - Виводимо значення
count
. - Збільшуємо
count
на 1 (стає 2). - Цикл знову перевіряє умову
count <= 5
(це True для значення 2). - Кроки 3-5 повторюються, поки
count
не досягне 6. - Коли
count
стає 6, умоваcount <= 5
стає False, і цикл завершується. - Виконується код після циклу - виводиться "Цикл завершено!".
Важливо пам'ятати!
У циклі while
обов'язково потрібно змінювати умову всередині циклу, інакше цикл може виконуватись безкінечно. Це називається нескінченним циклом і є поширеною помилкою початківців.
# Нескінченний цикл - НЕ ЗАПУСКАЙ цей код!
count = 1
while count <= 5:
print(count)
# Ой! Забули збільшити count!
Якщо ти запустиш цей код, він буде виводити "1" знову і знову, оскільки значення count
ніколи не зміниться, і умова count <= 5
завжди буде True
.
Приклади використання циклу while
Приклад 1: Відлік
countdown = 5
print("Запуск ракети через:")
while countdown > 0:
print(countdown, "...")
countdown = countdown - 1
print("Старт!")
Приклад 2: Сума чисел
total = 0
num = 1
while num <= 10:
total = total + num
num = num + 1
print("Сума чисел від 1 до 10 дорівнює:", total)
Приклад 3: Введення пароля
correct_password = "python123"
password = input("Введіть пароль: ")
while password != correct_password:
print("Неправильний пароль. Спробуйте ще раз.")
password = input("Введіть пароль: ")
print("Пароль правильний! Доступ надано.")
Цикл while з лічильником
Часто в циклах використовується лічильник, який відслідковує кількість виконаних ітерацій:
i = 0
while i < 5:
print("Ітерація номер:", i)
i = i + 1
Важливо зрозуміти: якщо лічильник i
починається з 0, і умова i < 5
, то цикл виконається 5 разів (для значень 0, 1, 2, 3, 4).
Збільшення значення змінної
В Python можна записувати збільшення змінної компактніше:
# Замість
count = count + 1
# Можна писати
count += 1
Також можна збільшувати на будь-яке число:
count += 2 # Збільшує count на 2
Практичне завдання
Напиши програму, яка запитує користувача ввести число, а потім виводить таблицю множення для цього числа від 1 до 10. Використай цикл while
.
Цикл for
Цикл for
в Python - це дуже потужний та гнучкий спосіб створення циклів. Його основна ідея - перебір елементів у послідовності (списку, рядку, діапазоні чисел тощо).
Синтаксис циклу for
for змінна in послідовність:
# блок коду, що виконується
# для кожного елемента послідовності
Як це працює:
- Python бере перший елемент з послідовності і присвоює його змінній.
- Виконується блок коду.
- Python бере наступний елемент з послідовності і знову присвоює його змінній.
- Блок коду виконується знову.
- Кроки 3-4 повторюються, поки не закінчаться всі елементи в послідовності.
Функція range() - створення послідовності чисел
Для створення послідовності чисел у Python використовується функція range()
. Вона може приймати від 1 до 3 параметрів:
range(кінець)
- створює послідовність від 0 до (кінець-1)range(початок, кінець)
- створює послідовність від початку до (кінець-1)range(початок, кінець, крок)
- створює послідовність від початку до (кінець-1) з вказаним кроком
# range(5) створює послідовність: 0, 1, 2, 3, 4
for i in range(5):
print(i)
# range(1, 6) створює послідовність: 1, 2, 3, 4, 5
for i in range(1, 6):
print(i)
# range(1, 10, 2) створює послідовність: 1, 3, 5, 7, 9
for i in range(1, 10, 2):
print(i)
# range(10, 0, -1) створює послідовність: 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
for i in range(10, 0, -1):
print(i)
Перебір елементів у рядку
Цикл for
може перебирати символи в рядку:
word = "Python"
for letter in word:
print(letter)
Цей код виведе:
P
y
t
h
o
n
Цикл for у порівнянні з циклом while
Той самий результат, що й у прикладах з while
, можна отримати за допомогою циклу for
:
# Використання циклу while
count = 1
while count <= 5:
print(count)
count += 1
# Використання циклу for
for count in range(1, 6):
print(count)
Обидва фрагменти коду виведуть числа від 1 до 5, але запис з for
коротший і зменшує ймовірність помилки (немає ризику створити нескінченний цикл).
Практичні приклади використання циклу for
Приклад 1: Сума чисел
total = 0
for num in range(1, 11):
total += num
print("Сума чисел від 1 до 10 дорівнює:", total)
Приклад 2: Таблиця множення
number = int(input("Введіть число для таблиці множення: "))
for i in range(1, 11):
result = number * i
print(f"{number} × {i} = {result}")
Приклад 3: Обчислення факторіалу
number = int(input("Введіть число для обчислення факторіалу: "))
factorial = 1
for i in range(1, number + 1):
factorial *= i
print(f"{number}! = {factorial}")
Вкладені цикли for
Можна розміщувати один цикл всередині іншого, створюючи вкладені цикли. Це корисно, коли потрібно перебрати всі комбінації елементів з двох послідовностей:
for i in range(1, 4): # Зовнішній цикл
for j in range(1, 4): # Внутрішній цикл
print(f"i = {i}, j = {j}")
Цей код виведе:
i = 1, j = 1
i = 1, j = 2
i = 1, j = 3
i = 2, j = 1
i = 2, j = 2
i = 2, j = 3
i = 3, j = 1
i = 3, j = 2
i = 3, j = 3
Приклад 4: Таблиця множення для чисел від 1 до 5
for i in range(1, 6):
for j in range(1, 11):
print(f"{i} × {j} = {i * j}")
print("-" * 15) # Розділювач між таблицями
Коли використовувати for, а коли while?
- Використовуй
for
, коли знаєш наперед, скільки разів потрібно повторити блок коду або коли працюєш з послідовностями (перебираєш елементи). - Використовуй
while
, коли не знаєш наперед, скільки разів буде виконуватись цикл, або коли потрібно виконувати цикл, поки виконується певна умова.
Практичне завдання
Напиши програму, яка виводить "ялинку" з зірочок. Висота ялинки визначається користувачем:
Наприклад, для висоти 5:
*
***
*****
*******
*********
Команди break і continue
Іноді при роботі з циклами виникають ситуації, коли потрібно передчасно завершити цикл або пропустити певну ітерацію. Для таких випадків у Python є спеціальні команди break
і continue
.
Команда break
Команда break
дозволяє негайно вийти з циклу, незалежно від того, чи виконується умова циклу. Це корисно, коли ми знайшли те, що шукали, і більше не потрібно продовжувати цикл.
Приклад 1: Пошук числа в послідовності
numbers = [4, 7, 2, 9, 1, 5]
search_for = 9
for number in numbers:
print(f"Перевіряємо число: {number}")
if number == search_for:
print(f"Знайдено число {search_for}!")
break # Виходимо з циклу, бо вже знайшли потрібне число
print("Пошук завершено")
Вивід програми:
Перевіряємо число: 4
Перевіряємо число: 7
Перевіряємо число: 2
Перевіряємо число: 9
Знайдено число 9!
Пошук завершено
Приклад 2: Перевірка пароля з обмеженням спроб
correct_password = "python123"
max_attempts = 3
attempts = 0
while attempts < max_attempts:
password = input("Введіть пароль: ")
attempts += 1
if password == correct_password:
print("Пароль правильний! Доступ надано.")
break # Виходимо з циклу, бо пароль правильний
print(f"Неправильний пароль. Залишилося спроб: {max_attempts - attempts}")
if attempts == max_attempts and password != correct_password:
print("Доступ заблоковано! Перевищено кількість спроб.")
Команда continue
Команда continue
дозволяє пропустити поточну ітерацію циклу і перейти до наступної. Вона корисна, коли ми хочемо пропустити деякі елементи, але продовжити цикл для інших.
Приклад 1: Вивід тільки парних чисел
for i in range(1, 11):
if i % 2 != 0: # Якщо число непарне
continue # Пропускаємо ітерацію для непарних чисел
print(i) # Ця команда виконається тільки для парних чисел
Вивід програми:
2
4
6
8
10
Приклад 2: Пропуск певних слів у списку
words = ["яблуко", "банан", "спам", "апельсин", "спам", "ківі"]
for word in words:
if word == "спам":
continue # Пропускаємо слово "спам"
print(f"Опрацьовуємо слово: {word}")
Вивід програми:
Опрацьовуємо слово: яблуко
Опрацьовуємо слово: банан
Опрацьовуємо слово: апельсин
Опрацьовуємо слово: ківі
Різниця між break і continue
break
повністю завершує цикл і виходить з нього.continue
пропускає поточну ітерацію і переходить до наступної.
Ось простий приклад, що демонструє різницю:
for i in range(1, 6):
if i == 3:
print(f"Знайдено число {i}! Використовуємо break")
break
print(f"Значення i: {i}")
print("Після циклу з break")
for i in range(1, 6):
if i == 3:
print(f"Знайдено число {i}! Використовуємо continue")
continue
print(f"Значення i: {i}")
print("Після циклу з continue")
Вивід програми:
Значення i: 1
Значення i: 2
Знайдено число 3! Використовуємо break
Після циклу з break
Значення i: 1
Значення i: 2
Знайдено число 3! Використовуємо continue
Значення i: 4
Значення i: 5
Після циклу з continue
Практичне застосування
Пошук простих чисел до 20
for num in range(2, 21):
is_prime = True
for divisor in range(2, num):
if num % divisor == 0:
is_prime = False
break # Якщо знайшли дільник, то число не просте, виходимо з внутрішнього циклу
if is_prime:
print(f"{num} - просте число")
Пропуск обробки порожніх рядків у введенні
while True:
line = input("Введіть рядок тексту (або 'вихід' для завершення): ")
if line.lower() == "вихід":
break # Завершуємо цикл
if not line: # Якщо рядок порожній
print("Порожній рядок пропущено.")
continue # Пропускаємо обробку порожнього рядка
print(f"Оброблено рядок: {line}")
Практичне завдання
Напиши програму, яка просить користувача вводити числа. Програма повинна додавати всі введені додатні числа і завершуватися, коли користувач введе "стоп". Від'ємні числа та нулі програма має пропускати.