Циклічні оператори

Циклічні оператори — це одна з найважливіших конструкцій у програмуванні. Вони дозволяють автоматично виконувати одні й ті самі дії багато разів, без необхідності писати однаковий код знову і знову.

Навіщо потрібні цикли?

Уявіть, що вам потрібно вивести числа від 1 до 100. Без циклів вам довелося б написати 100 рядків коду:

print(1) print(2) print(3) # ... ще 97 рядків

З циклами це можна зробити всього в 2 рядки:

for i in range(1, 101): print(i)

Що потрібно знати перед вивченням циклів?

Перед тим, як приступити до вивчення циклів, корисно розуміти:

  • Змінні — як створювати та змінювати їх значення
  • Умовні оператори (if, else, elif) — для контролю виконання коду всередині циклів
  • Логічні оператори (and, or, not) — для складних умов у циклах
  • Базові структури даних — списки, рядки, словники (для перебору елементів)

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

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

  1. for — коли ви знаєте, скільки разів потрібно повторити дію, або коли потрібно перебрати елементи колекції
  2. while — коли дія повинна повторюватися, поки виконується певна умова

Цикл for

Простий приклад використання for

Виводить числа від 0 до 4.

for i in range(5): print(i) # 0 # 1 # 2 # 3 # 4

Як працює range

range(stop)

Виводить числа від 0 до 4 (не включаючи 5).

for i in range(5): print(i) # 0 # 1 # 2 # 3 # 4

range(start, stop)

Виводить числа від 2 до 5.

for i in range(2, 6): print(i) # 2 # 3 # 4 # 5

range(start, stop, step)

Виводить числа від 1 до 9 з кроком 2.

for i in range(1, 10, 2): print(i) # 1 # 3 # 5 # 7 # 9

Цикл for з перебором елементів списку

Перебирає елементи списку та виводить їх.

fruits = ["яблуко", "банан", "вишня"] for fruit in fruits: print(fruit) # яблуко # банан # вишня

Перебір рядків

Перебирає кожен символ у рядку.

word = "Python" for letter in word: print(letter) # P # y # t # h # o # n

Використання enumerate()

Отримує індекс та значення елемента одночасно.

colors = ["червоний", "зелений", "синій"] for index, color in enumerate(colors): print(f"{index}: {color}") # 0: червоний # 1: зелений # 2: синій

enumerate() з власним початковим індексом

Починає нумерацію з 1 замість 0.

students = ["Олена", "Максим", "Ірина"] for number, student in enumerate(students, start=1): print(f"Студент #{number}: {student}") # Студент #1: Олена # Студент #2: Максим # Студент #3: Ірина

Перебір словника (dictionary)

Перебір ключів словника

person = {"ім'я": "Іван", "вік": 30, "місто": "Київ"} for key in person: print(key) # ім'я # вік # місто

Перебір значень словника

person = {"ім'я": "Іван", "вік": 30, "місто": "Київ"} for value in person.values(): print(value) # Іван # 30 # Київ

Перебір ключів та значень словника

person = {"ім'я": "Іван", "вік": 30, "місто": "Київ"} for key, value in person.items(): print(f"{key}: {value}") # ім'я: Іван # вік: 30 # місто: Київ

Комбінування кількох списків (zip)

Перебирає кілька списків одночасно.

names = ["Аліса", "Боб", "Чарлі"] ages = [25, 30, 35] for name, age in zip(names, ages): print(f"{name} має {age} років") # Аліса має 25 років # Боб має 30 років # Чарлі має 35 років

Використання for з умовою (continue, break)

Пропускає число 5 та завершує цикл при досягненні 8.

for num in range(10): if num == 5: continue if num == 8: break print(num) # 0 # 1 # 2 # 3 # 4 # 6 # 7

Використання reversed() для зворотного перебору

Перебирає елементи у зворотному порядку.

numbers = [1, 2, 3, 4, 5] for num in reversed(numbers): print(num) # 5 # 4 # 3 # 2 # 1

Зворотний перебір з range

Виводить числа від 10 до 1.

for i in range(10, 0, -1): print(i) # 10 # 9 # 8 # 7 # 6 # 5 # 4 # 3 # 2 # 1

Використання else з циклом for

Блок else виконується після завершення циклу, якщо він не був перерваний break.

for i in range(5): print(i) else: print("Цикл завершено успішно!") # 0 # 1 # 2 # 3 # 4 # Цикл завершено успішно!

else не виконується при break

for i in range(5): if i == 3: print("Знайдено 3, виходимо") break print(i) else: print("Це не виведеться") # 0 # 1 # 2 # Знайдено 3, виходимо

Практичні приклади використання циклів

Обчислення суми чисел

numbers = [10, 20, 30, 40, 50] total = 0 for num in numbers: total += num print(f"Сума: {total}") # Сума: 150

Пошук максимального значення

numbers = [23, 45, 12, 78, 34, 67] max_value = numbers[0] for num in numbers: if num > max_value: max_value = num print(f"Максимальне значення: {max_value}") # Максимальне значення: 78

Підрахунок кількості певних елементів

grades = [5, 4, 5, 3, 5, 4, 5, 2] count_excellent = 0 for grade in grades: if grade == 5: count_excellent += 1 print(f"Кількість оцінок '5': {count_excellent}") # Кількість оцінок '5': 4

Створення нового списку на основі існуючого

prices = [100, 200, 150, 300] discounted_prices = [] for price in prices: discounted_prices.append(price * 0.9) # знижка 10% print(discounted_prices) # [90.0, 180.0, 135.0, 270.0]

Фільтрація елементів

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] even_numbers = [] for num in numbers: if num % 2 == 0: even_numbers.append(num) print(even_numbers) # [2, 4, 6, 8, 10]

Побудова рядка з елементів списку

words = ["Python", "це", "потужна", "мова"] sentence = "" for word in words: sentence += word + " " print(sentence.strip()) # Python це потужна мова

Таблиця множення

number = 5 for i in range(1, 11): result = number * i print(f"{number} × {i} = {result}") # 5 × 1 = 5 # 5 × 2 = 10 # 5 × 3 = 15 # 5 × 4 = 20 # 5 × 5 = 25 # 5 × 6 = 30 # 5 × 7 = 35 # 5 × 8 = 40 # 5 × 9 = 45 # 5 × 10 = 50

Цикл while

Простий приклад використання while

Виводить значення змінної count, поки вона більше нуля.

count = 3 while count > 0: print(count) count -= 1 # 3 # 2 # 1

Використання while з умовою (continue, break)

Пропускає парні числа та завершує цикл, коли i стає більше 7.

i = 0 while i < 10: i += 1 if i % 2 == 0: continue if i > 7: break print(i) # 1 # 3 # 5 # 7

Використання else з циклом while

Блок else виконується після завершення циклу while, якщо умова стала хибною (а не через break).

count = 0 while count < 3: print(count) count += 1 else: print("Цикл завершено!") # 0 # 1 # 2 # Цикл завершено!

Практичні приклади з while

Введення даних до виконання умови

password = "" while password != "python123": password = input("Введіть пароль: ") print("Доступ дозволено!")

Гра "Вгадай число"

secret_number = 7 guess = 0 attempts = 0 while guess != secret_number: guess = int(input("Вгадайте число від 1 до 10: ")) attempts += 1 if guess < secret_number: print("Занадто мало!") elif guess > secret_number: print("Занадто багато!") print(f"Вітаємо! Ви вгадали за {attempts} спроб.")

Обчислення факторіала

n = 5 factorial = 1 i = 1 while i <= n: factorial *= i i += 1 print(f"Факторіал {n} = {factorial}") # Факторіал 5 = 120

Зворотний відлік

seconds = 5 while seconds > 0: print(f"До старту: {seconds} секунд") seconds -= 1 print("Старт!") # До старту: 5 секунд # До старту: 4 секунд # До старту: 3 секунд # До старту: 2 секунд # До старту: 1 секунд # Старт!

Нескінченний цикл з умовою виходу

while True: user_input = input("Введіть 'вихід' для завершення: ") if user_input.lower() == "вихід": print("До побачення!") break print(f"Ви ввели: {user_input}")

Вкладені цикли (nested loops)

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

for i in range(3): for j in range(2): print(f"i={i}, j={j}") # i=0, j=0 # i=0, j=1 # i=1, j=0 # i=1, j=1 # i=2, j=0 # i=2, j=1

Практичні приклади вкладених циклів

Виведення прямокутника зірочками

rows = 3 cols = 5 for i in range(rows): for j in range(cols): print("*", end=" ") print() # перехід на новий рядок # * * * * * # * * * * * # * * * * *

Виведення трикутника

height = 5 for i in range(1, height + 1): for j in range(i): print("*", end=" ") print() # * # * * # * * * # * * * * # * * * * *

Таблиця множення (повна)

for i in range(1, 6): for j in range(1, 6): print(f"{i} × {j} = {i*j:2}", end=" | ") print() # 1 × 1 = 1 | 1 × 2 = 2 | 1 × 3 = 3 | 1 × 4 = 4 | 1 × 5 = 5 | # 2 × 1 = 2 | 2 × 2 = 4 | 2 × 3 = 6 | 2 × 4 = 8 | 2 × 5 = 10 | # 3 × 1 = 3 | 3 × 2 = 6 | 3 × 3 = 9 | 3 × 4 = 12 | 3 × 5 = 15 | # 4 × 1 = 4 | 4 × 2 = 8 | 4 × 3 = 12 | 4 × 4 = 16 | 4 × 5 = 20 | # 5 × 1 = 5 | 5 × 2 = 10 | 5 × 3 = 15 | 5 × 4 = 20 | 5 × 5 = 25 |

Перебір матриці (двовимірного списку)

matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] for row in matrix: for element in row: print(element, end=" ") print() # 1 2 3 # 4 5 6 # 7 8 9

Пошук у вкладених списках

students = [ ["Олена", "Максим", "Ірина"], ["Петро", "Марія", "Андрій"], ["Катерина", "Іван", "Софія"] ] search_name = "Марія" found = False for group_index, group in enumerate(students): for student_index, student in enumerate(group): if student == search_name: print(f"Знайдено {search_name} у групі {group_index + 1}, позиція {student_index + 1}") found = True break if found: break # Знайдено Марія у групі 2, позиція 2

Оптимізація циклів: list comprehensions

List comprehensions — це компактний спосіб створення списків з використанням циклів.

Базовий приклад

# Звичайний цикл squares = [] for i in range(5): squares.append(i ** 2) print(squares) # [0, 1, 4, 9, 16] # List comprehension squares = [i ** 2 for i in range(5)] print(squares) # [0, 1, 4, 9, 16]

List comprehension з умовою

# Парні числа від 0 до 10 even_numbers = [i for i in range(11) if i % 2 == 0] print(even_numbers) # [0, 2, 4, 6, 8, 10]

List comprehension з перетворенням

names = ["олена", "максим", "ірина"] capitalized = [name.capitalize() for name in names] print(capitalized) # ['Олена', 'Максим', 'Ірина']

Вкладені list comprehensions

# Створення матриці 3×3 matrix = [[i + j for j in range(3)] for i in range(0, 9, 3)] print(matrix) # [[0, 1, 2], [3, 4, 5], [6, 7, 8]]

Поради щодо використання циклів

1. Уникайте нескінченних циклів

Погано:

i = 0 while i < 10: print(i) # Забули збільшити i — нескінченний цикл!

Добре:

i = 0 while i < 10: print(i) i += 1 # Не забувайте оновлювати змінну!

2. Використовуйте for коли знаєте кількість ітерацій

# Добре для відомої кількості ітерацій for i in range(10): print(i)

3. Використовуйте while для невизначеної кількості ітерацій

# Добре для умов, що залежать від введення користувача while user_input != "quit": user_input = input("Введіть команду: ")

4. Надавайте змінним описові назви

Погано:

for i in ["Олена", "Максим", "Ірина"]: print(i)

Добре:

for student in ["Олена", "Максим", "Ірина"]: print(student)

5. Використовуйте break для раннього виходу

numbers = [1, 2, 3, 4, 5, -1, 6, 7] for num in numbers: if num < 0: print("Знайдено від'ємне число!") break print(num)

Поширені помилки та як їх уникнути

Помилка 1: Зміна списку під час ітерації

Погано:

numbers = [1, 2, 3, 4, 5] for num in numbers: if num % 2 == 0: numbers.remove(num) # Небезпечно!

Добре:

numbers = [1, 2, 3, 4, 5] numbers = [num for num in numbers if num % 2 != 0] print(numbers) # [1, 3, 5]

Помилка 2: Забути збільшити лічильник у while

Погано:

count = 0 while count < 5: print(count) # Забули count += 1 — нескінченний цикл!

Добре:

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

Помилка 3: Неправильне використання range()

Погано:

# Не виведе 10 for i in range(10): print(i) # Виводить від 0 до 9

Добре:

# Щоб включити 10 for i in range(1, 11): print(i) # Виводить від 1 до 10
© 2024-2025 База знань по Python
ПідготувавКоворданій Володимир