Модуль

Розділ 4: Цикли

Модуль
module4.jpg

Вступ до циклів

Уяви, що тобі потрібно написати програму, яка виводить привітання 10 разів. Можна зробити так:

print("Привіт!")
print("Привіт!")
print("Привіт!")
print("Привіт!")
print("Привіт!")
print("Привіт!")
print("Привіт!")
print("Привіт!")
print("Привіт!")
print("Привіт!")

Але що, якщо потрібно вивести привітання 100 або 1000 разів? Писати однакові команди багато разів — не дуже ефективно. Для таких випадків у програмуванні існують цикли.

Циклом називають конструкцію, яка дозволяє виконувати один і той самий блок коду декілька разів. Це як кнопка повтору на програвачі музики, тільки для коду!

Нащо нам цикли?

Цикли використовуються, коли потрібно:

  • Виконати однакові дії багато разів
  • Опрацювати велику кількість даних
  • Повторювати дії, поки не виконається певна умова
  • Автоматизувати обчислення, які повторюються

Види циклів в Python

В Python є два основні типи циклів:

  1. while - виконується, поки умова істинна
  2. 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

Як це працює:

  1. Python перевіряє умову.
  2. Якщо умова True - виконується блок коду.
  3. Після виконання блоку коду, Python знову перевіряє умову.
  4. Кроки 2-3 повторюються, поки умова не стане False.
  5. Коли умова стає False, цикл завершується і програма продовжується далі.

Простий приклад

count = 1
while count <= 5:
    print(count)
    count = count + 1

print("Цикл завершено!")

Цей код виведе:

1
2
3
4
5
Цикл завершено!

Що відбувається в коді:

  1. Створили змінну count зі значенням 1.
  2. Цикл while перевіряє, чи count <= 5 (це True для значення 1).
  3. Виводимо значення count.
  4. Збільшуємо count на 1 (стає 2).
  5. Цикл знову перевіряє умову count <= 5 (це True для значення 2).
  6. Кроки 3-5 повторюються, поки count не досягне 6.
  7. Коли count стає 6, умова count <= 5 стає False, і цикл завершується.
  8. Виконується код після циклу - виводиться "Цикл завершено!".

Важливо пам'ятати!

У циклі 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 послідовність:
    # блок коду, що виконується
    # для кожного елемента послідовності

Як це працює:

  1. Python бере перший елемент з послідовності і присвоює його змінній.
  2. Виконується блок коду.
  3. Python бере наступний елемент з послідовності і знову присвоює його змінній.
  4. Блок коду виконується знову.
  5. Кроки 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}")

Практичне завдання

Напиши програму, яка просить користувача вводити числа. Програма повинна додавати всі введені додатні числа і завершуватися, коли користувач введе "стоп". Від'ємні числа та нулі програма має пропускати.

Пошук по уроку