← Back to course

Loops: for та while

Loops: for та while

Повертаємось до Python.

У попередній лекції ти вивчив умови.

Твої програми навчилися приймати рішення за допомогою:

if
else
elif

Дуже добре.

Тепер твоя програма може вибирати різні шляхи.

Але є ще одна велика проблема.

Що робити, якщо треба щось повторити?

Наприклад:

Вивести щось 10 разів.
Питати користувача, поки він не введе правильний пароль.
Порахувати totals для кількох продуктів.
Показати числа від 1 до 100.
Обробити багато елементів один за одним.

Без loops довелося б писати так:

print("Hello")
print("Hello")
print("Hello")
print("Hello")
print("Hello")

Це працює.

Але виглядає страшно.

Дуже страшно.

Як копіювати одне й те саме повідомлення п’ять разів, бо комп’ютер відмовився бути корисним.

Loops вирішують цю проблему.

Loops дозволяють програмі повторювати дії.

Python робить нудне повторення.

Ти зберігаєш психічне здоров’я.

Переважно.

Що ти вивчиш

У цій лекції ти вивчиш:

До кінця цієї лекції твої програми зможуть автоматично повторювати роботу.

Це величезний крок.

Бо комп’ютери дуже добре вміють повторювати.

Вони не нудяться.

Вони не скаржаться.

Вони не зітхають драматично після третього завдання.

На відміну від людей.

Особливо в понеділок.

Що таке loop?

Loop — це спосіб повторювати код.

Замість того, щоб писати:

print("Hello")
print("Hello")
print("Hello")

можна написати:

for number in range(3):
    print("Hello")

Output:

Hello
Hello
Hello

Код усередині loop виконується кілька разів.

Це дуже корисно.

Loop каже:

Виконай цю дію знову і знову.

Не назавжди.

Якщо тільки ти не зробиш помилку.

Тоді так, можливо, назавжди.

Про це ми поговоримо.

Дуже важливо.

І трохи страшно.

Твій перший for loop

Створи файл:

loops.py

Напиши:

for number in range(5):
    print("Hello from Python!")

Запусти:

python loops.py

або:

python3 loops.py

Output:

Hello from Python!
Hello from Python!
Hello from Python!
Hello from Python!
Hello from Python!

Рядок:

for number in range(5):

означає:

Повтори код з відступом 5 разів.

Рядок з відступом:

    print("Hello from Python!")

належить до loop.

Тому Python виконує його 5 разів.

Дуже корисно.

Дуже чисто.

Дуже “нарешті комп’ютер робить комп’ютерні речі”.

Indentation знову має значення

Так само як з if, indentation має значення в loops.

Правильно:

for number in range(3):
    print("Hello")

Неправильно:

for number in range(3):
print("Hello")

Python покаже:

IndentationError

Код усередині loop має бути з відступом.

Python використовує indentation, щоб розуміти, що належить до loop.

Твої пробіли — не декорація.

Вони структура.

Маленька архітектура.

Знову.

Python справді любить організовані меблі.

Двокрапка обов’язкова

for loop теж потребує двокрапки:

for number in range(3):

Неправильно:

for number in range(3)
    print("Hello")

Правильно:

for number in range(3):
    print("Hello")

Двокрапка каже Python:

Тут починається блок коду, який буде повторюватися.

Маленький символ.

Велика відповідальність.

Двокрапка — як маленькі двері в loop.

Забув двері — ніхто не зайде.

Розуміння range()

range() створює послідовність чисел.

Приклад:

for number in range(5):
    print(number)

Output:

0
1
2
3
4

Важлива деталь:

range(5)

починається з 0 і зупиняється перед 5.

Тобто дає:

0, 1, 2, 3, 4

А не:

1, 2, 3, 4, 5

Це дивує багатьох початківців.

Python починає рахувати з нуля.

Комп’ютери люблять нуль.

Ніхто не знає, чому вони так емоційно до нього прив’язані.

Насправді програмісти знають.

Але сьогодні ми не відкриваємо ту печеру.

Рахунок від 1

Якщо хочеш рахувати від 1 до 5, напиши:

for number in range(1, 6):
    print(number)

Output:

1
2
3
4
5

Тут:

range(1, 6)

означає:

Почни з 1.
Зупинись перед 6.

Тому останнє число — 5.

Дуже важливо.

Друге значення не включається.

Це дуже поширено в Python.

Спочатку здається дивним.

Потім стає нормальним.

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

range(start, stop, step)

range() також може використовувати step.

Приклад:

for number in range(0, 10, 2):
    print(number)

Output:

0
2
4
6
8

Це означає:

Почни з 0.
Зупинись перед 10.
Йди кроком 2.

Інший приклад:

for number in range(10, 0, -1):
    print(number)

Output:

10
9
8
7
6
5
4
3
2
1

Це рахує назад.

Дуже драматично.

Як запуск ракети.

Але з менше вогню.

Сподіваємось.

Loop variable

Подивись на це:

for number in range(5):
    print(number)

Змінна number змінюється кожного разу, коли loop виконується.

Перший раз:

number = 0

Другий раз:

number = 1

Третій раз:

number = 2

І так далі.

Loop variable зберігає поточне значення.

Можна назвати її інакше:

for i in range(5):
    print(i)

Це теж працює.

Багато розробників використовують i для простих лічильників.

Але зрозумілі назви часто кращі:

for product_number in range(5):
    print(product_number)

Використовуй назви, які мають сенс.

Майбутній ти все ще дивиться.

І трохи судить.

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

Спробуй:

for number in range(1, 6):
    print(f"Message number {number}")

Output:

Message number 1
Message number 2
Message number 3
Message number 4
Message number 5

Тепер loop не просто повторює.

Він також використовує поточне число.

Це дуже корисно.

Loops — не просто копіювальні машини.

Вони можуть змінювати щось на кожному кроці.

Трохи.

Як люди, які вчаться на помилках.

Але швидше.

Проста сума з loop

Можна використовувати loop, щоб порахувати total.

Приклад:

total = 0

for number in range(1, 6):
    total = total + number

print(f"Total: {total}")

Output:

Total: 15

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

Починаємо з total = 0.
Додаємо 1.
Додаємо 2.
Додаємо 3.
Додаємо 4.
Додаємо 5.
Виводимо фінальний total.

Це дуже поширений pattern.

Почати з порожнього результату.

Пройти через значення.

Оновити результат.

Вивести або використати результат.

Дуже корисно.

Дуже програмування.

Дуже “маленькі кроки стають чимось більшим”.

Коротше оновлення total

Це:

total = total + number

можна записати так:

total += number

Тому програма стає такою:

total = 0

for number in range(1, 6):
    total += number

print(f"Total: {total}")

Output:

Total: 15

Обидві версії правильні.

Коротша версія поширена.

Використовуй її, коли розумієш, що вона означає.

Не пиши короткий код тільки для того, щоб виглядати професійно.

Професійний код — це не код, який виглядає загадково.

Професійний код — це код, який працює і який можна зрозуміти пізніше.

Дуже нудно.

Дуже правда.

Прохід по тексту

Можна проходити по string через loop.

Приклад:

word = "Python"

for letter in word:
    print(letter)

Output:

P
y
t
h
o
n

String складається з characters.

Loop може проходити по них один за одним.

Тут:

letter

зберігає поточний character.

Спочатку:

P

Потім:

y

Потім:

t

І так далі.

Python розбирає слово як маленька ввічлива машина.

Без насильства.

Тільки characters.

Підрахунок letters

Спробуй:

word = input("Enter a word: ")

letter_count = 0

for letter in word:
    letter_count += 1

print(f"The word has {letter_count} letters.")

Приклад:

Enter a word: Python

Output:

The word has 6 letters.

Це рахує letters вручну.

Пізніше ти вивчиш простіші способи.

Але зробити це через loop допомагає зрозуміти, як loops працюють.

Іноді ми робимо щось довшим способом, щоб навчитися.

Не тому, що Python любить дивитися, як ми страждаємо.

Напевно.

Loop з умовами

Можна використовувати if всередині loop.

Приклад:

for number in range(1, 11):
    if number % 2 == 0:
        print(f"{number} is even")

Output:

2 is even
4 is even
6 is even
8 is even
10 is even

Цей рядок:

number % 2 == 0

перевіряє, чи число парне.

Оператор % дає остачу від ділення.

Якщо число при діленні на 2 має остачу 0, воно парне.

Приклад:

4 % 2 = 0
5 % 2 = 1

Дуже корисно.

Дуже класично.

Дуже математично, але не надто страшно.

Математичний дракон ще спить.

Парні й непарні числа

Створи файл:

even_odd.py

Напиши:

for number in range(1, 11):
    if number % 2 == 0:
        print(f"{number} is even")
    else:
        print(f"{number} is odd")

Output:

1 is odd
2 is even
3 is odd
4 is even
5 is odd
6 is even
7 is odd
8 is even
9 is odd
10 is even

Тепер loop повторює.

Умова вирішує.

Разом вони роблять програму сильнішою.

Loops і conditions — це маленький двигун програмування.

Не glamour.

Але дуже сильний.

Як старий дизельний фургон, який відмовляється помирати.

Що таке while loop?

while loop повторює код, поки умова true.

Приклад:

count = 1

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

Output:

1
2
3
4
5

Це означає:

Поки count менше або дорівнює 5, повторюй блок.

Кожного разу ми збільшуємо count на 1.

Зрештою count стає 6.

Тоді умова стає false.

Loop зупиняється.

Дуже важливо.

while loop має мати спосіб зупинитися.

Інакше він стає infinite loop.

І твій комп’ютер починає дивитися на тебе з розчаруванням.

for vs while

Використовуй for, коли знаєш, скільки разів треба повторити.

Приклад:

for number in range(5):
    print(number)

Використовуй while, коли хочеш повторювати, поки щось не зміниться.

Приклад:

password = ""

while password != "secret":
    password = input("Password: ")

print("Access granted.")

Просте правило:

for     повторюй по відомій sequence
while   повторюй, поки condition true

Це правило не ідеальне для кожної ситуації.

Але для початківців дуже хороше.

Твій перший while loop

Створи файл:

while_loop.py

Напиши:

count = 1

while count <= 5:
    print(f"Count: {count}")
    count += 1

Запусти.

Output:

Count: 1
Count: 2
Count: 3
Count: 4
Count: 5

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

count починається з 1.
Python перевіряє, чи count <= 5.
Якщо true, виводить.
Потім count збільшується на 1.
Python перевіряє знову.
Зрештою count стає 6.
Умова false.
Loop зупиняється.

Це базовий while pattern.

Початок.

Перевірка.

Повторення.

Оновлення.

Стоп.

Красиво.

Як пральна машина з логікою.

Infinite loops

Infinite loop — це loop, який ніколи не закінчується.

Приклад:

count = 1

while count <= 5:
    print(count)

Це небезпечно.

Чому?

Бо count ніколи не змінюється.

Він завжди 1.

Тому:

count <= 5

завжди true.

Loop працює вічно.

Або поки ти не зупиниш програму.

Це називається infinite loop.

Дуже типова помилка початківців.

Дуже дратує.

Чудовий спосіб зробити так, щоб terminal виглядав одержимим.

Як зупинити infinite loop

Якщо програма застрягла в infinite loop, натисни:

Ctrl + C

Це перериває програму.

Terminal може показати щось типу:

KeyboardInterrupt

Це нормально.

Це означає, що ти зупинив програму.

Не елегантно.

Але ефективно.

Як витягнути вилку з розгубленого робота.

Уникай infinite loops, переконавшись, що умова може стати false.

Дуже важливо.

Password loop

Хороше використання while — питати, поки користувач не дасть правильну відповідь.

Створи файл:

password_loop.py

Напиши:

password = ""

while password != "python123":
    password = input("Enter password: ")

print("Access granted.")

Приклад:

Enter password: banana
Enter password: hello
Enter password: python123
Access granted.

Loop продовжується, поки password неправильний.

Коли користувач вводить:

python123

умова стає false.

Loop зупиняється.

Потім програма виводить:

Access granted.

Дуже корисно.

Дуже просто.

Дуже погано як справжня security.

Знову: не захищай банк лекцією 5.

Використання break

break негайно зупиняє loop.

Приклад:

while True:
    answer = input("Type q to quit: ")

    if answer == "q":
        break

    print(f"You typed: {answer}")

print("Program ended.")

Цей loop починається з:

while True:

Це означає:

Повторюй вічно.

Але всередині loop ми використовуємо:

break

щоб зупинитися, коли користувач вводить "q".

Приклад:

Type q to quit: hello
You typed: hello
Type q to quit: test
You typed: test
Type q to quit: q
Program ended.

break корисний.

Але використовуй його зрозуміло.

Loop з багатьма секретними виходами перетворюється на лабіринт.

А debug лабіринту не любить ніхто.

Хіба що дуже дивні люди.

Використання continue

continue пропускає решту поточного проходу loop і переходить до наступної iteration.

Приклад:

for number in range(1, 6):
    if number == 3:
        continue

    print(number)

Output:

1
2
4
5

Коли number дорівнює 3, Python виконує:

continue

Тому пропускає:

print(number)

для цієї iteration.

Потім loop продовжується з 4.

continue корисний, коли хочеш пропустити певні випадки.

Ніби сказати:

Не цей. Наступний.

Дуже практично.

І трохи грубо.

break vs continue

Проста різниця:

break      повністю зупиняє loop
continue   пропускає цей раз і переходить до наступного

Приклад з break:

for number in range(1, 6):
    if number == 3:
        break

    print(number)

Output:

1
2

Loop зупиняється на 3.

Приклад з continue:

for number in range(1, 6):
    if number == 3:
        continue

    print(number)

Output:

1
2
4
5

Loop пропускає 3, але продовжується.

Маленькі слова.

Різна поведінка.

Не плутай їх, якщо не любиш сюрпризи.

Типова помилка: забути оновити while variable

Неправильно:

count = 1

while count <= 5:
    print(count)

Це ніколи не зупиниться.

Правильно:

count = 1

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

Завжди питай:

Як цей while loop зупиниться?

Якщо не можеш відповісти, твій loop може стати безсмертним.

Безсмертний код звучить круто.

Але ні.

Зазвичай це bug у плащі.

Типова помилка: неправильний range()

Очікування початківця:

for number in range(5):
    print(number)

Очікуваний output:

1
2
3
4
5

Реальний output:

0
1
2
3
4

Запам’ятай:

range(5)

починається з 0 і зупиняється перед 5.

Якщо хочеш від 1 до 5:

for number in range(1, 6):
    print(number)

Це дає:

1
2
3
4
5

Python не помиляється.

Це просто Python.

Це речення ще багато разів стане корисним.

Типова помилка: неправильна indentation

Неправильно:

for number in range(3):
print(number)

Правильно:

for number in range(3):
    print(number)

Код усередині loop має бути з відступом.

Якщо кілька рядків належать до loop, усі вони мають бути з відступом:

for number in range(3):
    print("Current number:")
    print(number)

Обидва print() рядки виконуються всередині loop.

Якщо рядок не має відступу, він поза loop.

Приклад:

for number in range(3):
    print(number)

print("Done")

Output:

0
1
2
Done

Done виводиться тільки один раз після завершення loop.

Дуже важливо.

Indentation вирішує приналежність.

Як документи для code blocks.

Типова помилка: використовувати while, коли for простіший

Це працює:

count = 0

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

Але це простіше:

for count in range(5):
    print(count)

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

Використовуй while, коли loop залежить від умови.

Не використовуй викрутку як ложку.

Може спрацювати.

Але люди ставитимуть питання.

Міні-програма: таблиця множення

Створи файл:

multiplication_table.py

Напиши:

number = int(input("Enter a number: "))

for i in range(1, 11):
    result = number * i
    print(f"{number} x {i} = {result}")

Приклад:

Enter a number: 5

Output:

5 x 1 = 5
5 x 2 = 10
5 x 3 = 15
5 x 4 = 20
5 x 5 = 25
5 x 6 = 30
5 x 7 = 35
5 x 8 = 40
5 x 9 = 45
5 x 10 = 50

Це класична програма з loop.

Дуже корисна.

Дуже проста.

Дуже школа, але в хорошому сенсі.

Переважно.

Міні-програма: сума чисел

Створи файл:

sum_numbers.py

Напиши:

limit = int(input("Add numbers from 1 to: "))

total = 0

for number in range(1, limit + 1):
    total += number

print(f"Total: {total}")

Приклад:

Add numbers from 1 to: 5

Output:

Total: 15

Бо:

1 + 2 + 3 + 4 + 5 = 15

Зверни увагу:

range(1, limit + 1)

Чому limit + 1?

Бо range() зупиняється перед другим значенням.

Якщо користувач вводить 5, нам потрібно:

range(1, 6)

Маленька деталь.

Велика важливість.

Python любить ці маленькі пастки.

Навчальні пастки.

Але все одно пастки.

Міні-програма: вгадай число

Створи файл:

guess_number.py

Напиши:

secret_number = 7
guess = 0

while guess != secret_number:
    guess = int(input("Guess the number: "))

    if guess < secret_number:
        print("Too low.")
    elif guess > secret_number:
        print("Too high.")
    else:
        print("Correct!")

Приклад:

Guess the number: 3
Too low.
Guess the number: 10
Too high.
Guess the number: 7
Correct!

Ця програма використовує:

Багато лекцій разом.

Так росте програмування.

Одна ідея з’єднується з іншою.

Як кабелі.

Сподіваємось, підписані.

Міні-програма: menu loop

Створи файл:

menu.py

Напиши:

choice = ""

while choice != "q":
    print("----- Menu -----")
    print("1. Say hello")
    print("2. Say goodbye")
    print("q. Quit")

    choice = input("Choose an option: ").lower()

    if choice == "1":
        print("Hello!")
    elif choice == "2":
        print("Goodbye!")
    elif choice == "q":
        print("Exiting...")
    else:
        print("Unknown option.")

Ця програма продовжує показувати menu, поки користувач не введе:

q

Menu loops дуже поширені.

Багато terminal-програм працюють саме так.

Програма питає.

Користувач вибирає.

Програма реагує.

Потім знову питає.

Народилась маленька command-line application.

Дуже мила.

Дуже корисна.

Не годуй її після опівночі.

Практика

Створи файл:

practice_loops.py

Напиши програму, яка:

Приклад:

limit = int(input("Enter a number: "))

total = 0

for number in range(1, limit + 1):
    total += number

    if number % 2 == 0:
        print(f"{number} is even")
    else:
        print(f"{number} is odd")

print(f"Total sum: {total}")

Приклад output:

Enter a number: 5
1 is odd
2 is even
3 is odd
4 is even
5 is odd
Total sum: 15

Це хороша практика.

Вона поєднує:

Дуже сильна вправа для початківців.

Не легка.

Але дуже корисна.

Міні-завдання

Створи файл:

shopping_total.py

Твоя програма має:

Приклад рішення:

product_count = int(input("How many products? "))

total = 0

for number in range(1, product_count + 1):
    print(f"Product {number}")

    product_name = input("Name: ")
    price = float(input("Price: "))

    total += price

    print(f"Added {product_name}: {price:.2f}")

print("----- Total -----")
print(f"Total price: {total:.2f}")

Приклад взаємодії:

How many products? 3
Product 1
Name: Keyboard
Price: 70
Added Keyboard: 70.00
Product 2
Name: Mouse
Price: 25
Added Mouse: 25.00
Product 3
Name: Notebook
Price: 5.5
Added Notebook: 5.50
----- Total -----
Total price: 100.50

Це близько до реальної логіки.

Магазин.

Список продуктів.

Total.

Ще без database.

Ще без web app.

Але ідея реальна.

Маленька terminal-програма.

Велика основа.

Дуже Python.

Extra challenge: password з attempts

Створи файл:

password_attempts.py

Твоя програма має:

Приклад рішення:

secret_password = "python123"
attempts = 0
max_attempts = 3
access_granted = False

while attempts < max_attempts:
    password = input("Password: ")
    attempts += 1

    if password == secret_password:
        access_granted = True
        break
    else:
        print("Wrong password.")

if access_granted:
    print("Access granted.")
else:
    print("Access denied.")

Ця програма використовує:

Дуже хороша практика.

Це серйозніша логіка.

Все ще не справжня security.

Але дуже хороше навчання.

Банк досі не в безпеці.

Будь ласка, тримай банк подалі від цієї лекції.

Checklist для початківців

Коли твій loop не працює, перевір:

Я зберіг файл?
Я використав двокрапку після for або while?
Тіло loop має indentation?
Мій while loop має спосіб зупинитися?
Я оновив counter?
Я правильно використовую range()?
Мені потрібно range(1, limit + 1)?
Я випадково не поставив код поза loop?
Я використав break, коли хотів зупинити loop?
Я використав continue, коли хотів пропустити тільки один прохід?

Loops потужні.

Але можуть створювати заплутані bugs.

Особливо while loops.

Завжди питай:

Що змінюється кожного разу?
Коли loop зупиниться?

Якщо ти можеш відповісти на ці два питання, ти значно безпечніший.

Якщо ні — готуйся до хаосу.

Навчального хаосу.

Але все одно хаосу.

Підсумок

Сьогодні ти вивчив:

Це величезний крок.

Твої програми тепер можуть повторювати роботу.

Вони можуть рахувати.

Можуть питати знову.

Можуть обчислювати totals.

Можуть показувати menus.

Можуть обробляти багато values.

Тут програмування стає набагато потужнішим.

Бо комп’ютери люблять repetition.

А люди люблять не робити нудне repetition вручну.

Чудова співпраця.

Переважно.

Наступна лекція

У наступній лекції ми вивчимо lists.

Lists дозволяють зберігати багато values в одній variable.

Замість того, щоб писати:

product1 = "Keyboard"
product2 = "Mouse"
product3 = "Notebook"

ти напишеш:

products = ["Keyboard", "Mouse", "Notebook"]

Потім loops і lists працюватимуть разом.

І саме там Python починає ставати набагато кориснішим.

Дуже сильний прогрес.

Дуже Python.