Цикли for

Останнє оновлення 2026-06-18 | Редагувати цю сторінку

Приблизний час: 25 хвилин

Огляд

Питання

  • Як змусити програму ефективно виконувати багато задач?

Цілі

  • Пояснити, для чого зазвичай використовуються цикли for.
  • Проаналізувати виконання простого (не вкладеного) циклу та правильно вказати значення змінних у кожній ітерації.
  • Написати цикли for, які використовують шаблон накопичення для агрегації значень.

Цикл for виконує команди один раз для кожного значення в колекції.


  • Виконання обчислень над елементами списку окремо є таким самим виснажливим, як і робота зі змінними на кшталт pressure_001, pressure_002 і так далі.
  • Цикл for вказує Python, що треба виконати набір інструкцій для кожного елемента списку, рядка або іншої колекції.
  • “для кожного елемента в цій групі виконайте ці операції”

PYTHON

for number in [2, 3, 5]: 
     print(number)
  • Цей цикл for є еквівалентним наступному:

PYTHON

print(2) 
print(3) 
print(5)
  • І результат циклу for є таким:

ВИВІД

2
3
5

Цикл for складається з колекції, змінної циклу та тіла циклу.


PYTHON

for number in [2, 3, 5]: 
    print(number)
  • Колекція [2, 3, 5] - це те, що опрацьовується в циклі.
  • Тіло циклу, print(number), визначає, що робити для кожного значення в колекції.
  • Змінна циклу, number, змінюється для кожної ітерації циклу.
    • Це - “поточне значення”.

Перший рядок циклу for має закінчуватися двокрапкою, а тіло циклу має бути з відступом.


  • Двокрапка в кінці першого рядка вказує на початок блоку операторів.
  • Python використовує відступи замість {} або begin/end, щоб показати вкладеність.
    • Будь-яке послідовне використання відступів є допустимим, але зазвичай використовують чотири пробіли.

PYTHON

for number in [2, 3, 5]:
print(number)

ПОМИЛКА

IndentationError: expected an indented block
  • Відступи у Python завжди важливі.

PYTHON

firstName = "Jon"
  lastName = "Smith"

ПОМИЛКА

  File "<ipython-input-7-f65f2962bf9c>", line 2
    lastName = "Smith"
    ^
IndentationError: unexpected indent
  • Ця помилка може бути виправлена шляхом видалення зайвих пробілів на початку другого рядку.

Змінні циклу можна називати як завгодно.


  • Як і всі інші змінні, змінні циклу:
    • Створюються за потреби
    • Не несуть смислового навантаження: їх імена можуть бути будь-якими.

PYTHON

for kitten in [2, 3, 5]: 
    print(kitten)

Тіло циклу може містити багато операторів.


  • Але жоден цикл не повинен мати довжину більше кількох рядків.
  • Людям важко утримувати у пам’яті великі фрагменти коду.

PYTHON

primes = [2, 3, 5]
for p in primes: 
    squared = p ** 2 
    cubed = p ** 3 
    print(p, squared, cubed)

ВИВІД

2 4 8
3 9 27
5 25 125

Використовуйте range для перебору послідовності чисел.


  • Вбудована функція range створює послідовність чисел.
    • Це не список: числа генеруються за потребою, щоб зробити перебір по великих діапазонах ефективнішим.
  • range(N) є послідовністю чисел від 0 до N-1 включно.
    • Це в точності збігається з індексами списку або рядка символів довжиною N.

PYTHON

print('a range is not a list: range(0, 3)')
for number in range(0, 3):
    print(number)

ВИВІД

a range is not a list: range(0, 3)
0
1
2

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


  • Поширений алгоритм, який можна побачити у програмах:
    1. Надати початкове значення для накопичувальної змінної: нуль, порожній рядок або порожній список.
    2. Оновлення змінної значеннями з колекції.

PYTHON

# Знайти суму перших 10 цілих чисел.
total = 0
for number in range(10):
   total = total + (number + 1)
print(total)

ВИВІД

55
  • Команда total = total + (number + 1) інтерпретується наступним чином:
    • Додати 1 до поточного значення змінної циклу number.
    • Додати це до поточного значення змінної-накопичувача total.
    • Присвоїти результат змінній total, замінивши її поточне значення.
  • Ми маємо додавати number + 1, тому що range генерує значення 0..9, а не 1..10.
Вправа

Класифікація помилок

Чи є помилка відступу (indentation error) синтаксичною помилкою чи помилкою виконання?

IndentationError є синтаксичною помилкою. Програми з синтаксичними помилками неможливо запустити. Програма з помилкою виконання запускається, але за певних умов видається помилка.

Вправа

Відстеження виконання

Створіть таблицю: номери рядків, що виконуються під час роботи програми, та значення змінних після кожного кроку.

PYTHON

total = 0
for char in "tin":
    total = total + 1
Номер рядка Значення змінних
1 total = 0
2 total = 0 char = ‘t’
3 total = 1 char = ‘t’
2 total = 1 char = ‘i’
3 total = 2 char = ‘i’
2 total = 2 char = ‘n’
3 total = 3 char = ‘n’
Вправа

Зміна порядку символів у рядку на зворотний

Заповніть порожні місця в програмі нижче, щоб вона друкувала “nit” (символи з вихідного рядку “tin” у зворотному порядку).

PYTHON

original = "tin"
result = ____
for char in original:
    result = ____
print(result)

PYTHON

original = "tin"
result = ""
for char in original:
    result = char + result
print(result)
Вправа

Практика використання шаблону накопичення

Заповніть порожні місця в програмі нижче, для створення зазначеного результату.

PYTHON

# Сума довжин рядків у списку: ["red", "green", "blue"] => 12
total = 0
for word in ["red", "green", "blue"]:
    ____ = ____ + len(word)
print(total)

PYTHON

total = 0
for word in ["red", "green", "blue"]:
    total = total + len(word)
print(total)
Вправа

Практика використання шаблону накопичення (continued)

PYTHON

# Список довжин слів: ["red", "green", "blue"] => [3, 5, 4]
lengths = ____
for word in ["red", "green", "blue"]:
    lengths.____(____)
print(lengths)

PYTHON

lengths = []
for word in ["red", "green", "blue"]:
    lengths.append(len(word))
print(lengths)
Вправа

Практика використання шаблону накопичення (continued)

PYTHON

# Об’єднайте всі слова: ["red", "green", "blue"] => "redgreenblue"
words = ["red", "green", "blue"]
result = ____
for ____ in ____:
    ____
print(result)

PYTHON

words = ["red", "green", "blue"]
result = ""
for word in words:
    result = result + word
print(result)
Вправа

Практика використання шаблону накопичення (continued)

Створіть акронім: За допомогою циклу for сформуйте акронім "RGB" зі списку ["red", "green", "blue"].

Підказка: Для правильного форматування акроніма може знадобитися один з методів, які визначені для рядків.

PYTHON

acronym = ""
for word in ["red", "green", "blue"]:
    acronym = acronym + word[0].upper()
print(acronym)
Вправа

Накопичувальна сума

Перегрупуйте та правильно розставте відступи в рядках коду нижче, щоб програма вивела новий список, у якому i-тий елемент є сумою усіх елементів з першого до i-го включно зі списку data. Результатом має бути [1, 3, 5, 10].

PYTHON

cumulative.append(total)
for number in data:
cumulative = []
total = total + number
total = 0
print(cumulative)
data = [1,2,2,5]

PYTHON

total = 0
data = [1,2,2,5]
cumulative = []
for number in data:
    total = total + number
    cumulative.append(total)
print(cumulative)
Вправа

Виявлення помилок в іменах змінних

  1. Прочитайте наведений нижче код і спробуйте знайти помилки без запуску програми.
  2. Запустіть код і прочитайте повідомлення про помилку. Як ви думаєте, який це тип NameError? Це рядок без лапок, змінна з орфографічною помилкою чи змінна, яку не було попередньо визначено?
  3. Виправте помилку.
  4. Повторюйте кроки 2 і 3, доки не виправите всі помилки.

PYTHON

for number in range(10):
    # використовуйте a, якщо число кратне 3, інакше використовуйте b
    if (Number % 3) == 0:
        message = message + a
    else:
        message = message + "b"
print(message)
  • Імена змінних у Python чутливі до регістру: number та Number вказують на різні змінні.
  • Змінна message має бути ініціалізована як порожній рядок.
  • Потрібно додати рядок з вмістом "a" до message, а не невизначену змінну a.

PYTHON

message = ""
for number in range(10):
    # використовуйте a, якщо число кратне 3, інакше використовуйте b
    if (number % 3) == 0:
        message = message + "a"
    else:
        message = message + "b"
print(message)
Вправа

Виявлення помилок індексації

  1. Прочитайте наведений нижче код і спробуйте знайти помилки без запуску програми.
  2. Запустіть код і прочитайте повідомлення про помилку. Який це тип помилки?
  3. Виправте помилку.

PYTHON

seasons = ['Spring', 'Summer', 'Fall', 'Winter']
print('My favorite season is ', seasons[4])

Цей список має 4 елементи, тому індекс для доступу до останнього елемента у списку становить 3.

PYTHON

seasons = ['Spring', 'Summer', 'Fall', 'Winter']
print('My favorite season is ', seasons[3])
Ключові моменти
  • Цикл for виконує команди один раз для кожного значення в колекції.
  • Цикл for складається з колекції, змінної циклу та тіла циклу.
  • Перший рядок циклу for має закінчуватися двокрапкою, а тіло циклу має бути з відступом.
  • Відступи у Python завжди мають значення.
  • Змінні циклу можна назвати як завгодно (але бажано, щоб їх назва була змістовною).
  • Тіло циклу може містити багато операторів.
  • Використовуйте range для перебору послідовності чисел.
  • Шаблон накопичення перетворює набір значень на одне підсумкове.