Цикли for
Останнє оновлення 2026-06-18 | Редагувати цю сторінку
Огляд
Питання
- Як змусити програму ефективно виконувати багато задач?
Цілі
- Пояснити, для чого зазвичай використовуються цикли for.
- Проаналізувати виконання простого (не вкладеного) циклу та правильно вказати значення змінних у кожній ітерації.
- Написати цикли for, які використовують шаблон накопичення для агрегації значень.
Цикл for виконує команди один раз для кожного значення в колекції.
- Виконання обчислень над елементами списку окремо є таким самим
виснажливим, як і робота зі змінними на кшталт
pressure_001,pressure_002і так далі. - Цикл for вказує Python, що треба виконати набір інструкцій для кожного елемента списку, рядка або іншої колекції.
- “для кожного елемента в цій групі виконайте ці операції”
- Цей цикл
forє еквівалентним наступному:
- І результат циклу
forє таким:
ВИВІД
2
3
5
Цикл for складається з колекції, змінної циклу та тіла
циклу.
- Колекція
[2, 3, 5]- це те, що опрацьовується в циклі. - Тіло циклу,
print(number), визначає, що робити для кожного значення в колекції. - Змінна циклу,
number, змінюється для кожної ітерації циклу.- Це - “поточне значення”.
Перший рядок циклу for має закінчуватися двокрапкою, а
тіло циклу має бути з відступом.
- Двокрапка в кінці першого рядка вказує на початок блоку операторів.
- Python використовує відступи замість
{}абоbegin/end, щоб показати вкладеність.- Будь-яке послідовне використання відступів є допустимим, але зазвичай використовують чотири пробіли.
ПОМИЛКА
IndentationError: expected an indented block
- Відступи у Python завжди важливі.
ПОМИЛКА
File "<ipython-input-7-f65f2962bf9c>", line 2
lastName = "Smith"
^
IndentationError: unexpected indent
- Ця помилка може бути виправлена шляхом видалення зайвих пробілів на початку другого рядку.
Змінні циклу можна називати як завгодно.
- Як і всі інші змінні, змінні циклу:
- Створюються за потреби
- Не несуть смислового навантаження: їх імена можуть бути будь-якими.
Тіло циклу може містити багато операторів.
- Але жоден цикл не повинен мати довжину більше кількох рядків.
- Людям важко утримувати у пам’яті великі фрагменти коду.
ВИВІД
2 4 8
3 9 27
5 25 125
Використовуйте range для перебору послідовності
чисел.
- Вбудована функція
rangeстворює послідовність чисел.- Це не список: числа генеруються за потребою, щоб зробити перебір по великих діапазонах ефективнішим.
-
range(N)є послідовністю чисел від 0 до N-1 включно.- Це в точності збігається з індексами списку або рядка символів довжиною N.
ВИВІД
a range is not a list: range(0, 3)
0
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, замінивши її поточне значення.
- Додати 1 до поточного значення змінної циклу
- Ми маємо додавати
number + 1, тому щоrangeгенерує значення 0..9, а не 1..10.
Класифікація помилок
Чи є помилка відступу (indentation error) синтаксичною помилкою чи помилкою виконання?
IndentationError є синтаксичною помилкою. Програми з синтаксичними помилками неможливо запустити. Програма з помилкою виконання запускається, але за певних умов видається помилка.
| Номер рядка | Значення змінних |
|---|---|
| 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’ |
Практика використання шаблону накопичення (continued)
Створіть акронім: За допомогою циклу
for сформуйте акронім "RGB" зі списку
["red", "green", "blue"].
Підказка: Для правильного форматування акроніма може знадобитися один з методів, які визначені для рядків.
Накопичувальна сума
Перегрупуйте та правильно розставте відступи в рядках коду нижче, щоб
програма вивела новий список, у якому i-тий елемент є сумою
усіх елементів з першого до i-го включно зі списку
data. Результатом має бути [1, 3, 5, 10].
Виявлення помилок в іменах змінних
- Прочитайте наведений нижче код і спробуйте знайти помилки без запуску програми.
- Запустіть код і прочитайте повідомлення про помилку. Як ви думаєте,
який це тип
NameError? Це рядок без лапок, змінна з орфографічною помилкою чи змінна, яку не було попередньо визначено? - Виправте помилку.
- Повторюйте кроки 2 і 3, доки не виправите всі помилки.
- Імена змінних у Python чутливі до регістру:
numberтаNumberвказують на різні змінні. - Змінна
messageмає бути ініціалізована як порожній рядок. - Потрібно додати рядок з вмістом
"a"доmessage, а не невизначену зміннуa.
Виявлення помилок індексації
- Цикл
forвиконує команди один раз для кожного значення в колекції. - Цикл
forскладається з колекції, змінної циклу та тіла циклу. - Перший рядок циклу
forмає закінчуватися двокрапкою, а тіло циклу має бути з відступом. - Відступи у Python завжди мають значення.
- Змінні циклу можна назвати як завгодно (але бажано, щоб їх назва була змістовною).
- Тіло циклу може містити багато операторів.
- Використовуйте
rangeдля перебору послідовності чисел. - Шаблон накопичення перетворює набір значень на одне підсумкове.