Цикли for

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

Огляд

Питання

  • How can I make a program do many things?

Цілі

  • Пояснити, для чого зазвичай використовуються цикли 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

The Accumulator pattern turns many values into one.


  • A common pattern in programs is to:
    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.
Вправа

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

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

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

# Total length of the strings in the list: ["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"].

Hint: You may need to use a string method to properly format the acronym.

PYTHON

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

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

Reorder and properly indent the lines of code below so that they print a list with the cumulative sum of 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. Read the code below and try to identify what the errors are without running it.
  2. Запустіть код і прочитайте повідомлення про помилку. Як ви думаєте, який це тип NameError? Is it a string with no quotes, a misspelled variable, or a variable that should have been defined but was not?
  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 має бути ініціалізована як порожній рядок.
  • We want to add the string "a" to message, not the undefined variable a.

PYTHON

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

Identifying Item Errors

  1. Read the code below and try to identify what the errors are without running it.
  2. Запустіть код і прочитайте повідомлення про помилку. Який це тип помилки?
  3. Виправте помилку.

PYTHON

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

This list has 4 elements and the index to access the last element in the list is 3.

PYTHON

seasons = ['Spring', 'Summer', 'Fall', 'Winter']
print('My favorite season is ', seasons[3])
Ключові моменти
  • Цикл for виконує команди один раз для кожного значення в колекції.
  • Цикл for складається з колекції, змінної циклу та тіла циклу.
  • Перший рядок циклу for має закінчуватися двокрапкою, а тіло циклу має бути з відступом.
  • Відступи у Python завжди важливі.
  • Loop variables can be called anything (but it is strongly advised to have a meaningful name to the looping variable).
  • Тіло циклу може містити багато операторів.
  • Use range to iterate over a sequence of numbers.
  • The Accumulator pattern turns many values into one.