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 робить нудне повторення.
Ти зберігаєш психічне здоров’я.
Переважно.
Що ти вивчиш
У цій лекції ти вивчиш:
- що таке loops;
- чому loops корисні;
- як використовувати
for; - як використовувати
range(); - як працюють loop variables;
- як повторювати код конкретну кількість разів;
- як проходити по тексту;
- як використовувати
while; - як зупиняти loop за умовою;
- як використовувати counters;
- як уникати infinite loops;
- як використовувати
break; - як використовувати
continue; - типові помилки початківців;
- як будувати прості програми на основі loops.
До кінця цієї лекції твої програми зможуть автоматично повторювати роботу.
Це величезний крок.
Бо комп’ютери дуже добре вміють повторювати.
Вони не нудяться.
Вони не скаржаться.
Вони не зітхають драматично після третього завдання.
На відміну від людей.
Особливо в понеділок.
Що таке 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!
Ця програма використовує:
- variables;
- input;
- type conversion;
while;- conditions;
- comparison operators.
Багато лекцій разом.
Так росте програмування.
Одна ідея з’єднується з іншою.
Як кабелі.
Сподіваємось, підписані.
Міні-програма: 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
Напиши програму, яка:
- питає користувача число;
- виводить усі числа від 1 до цього числа;
- виводить, чи кожне число парне або непарне;
- рахує total sum.
Приклад:
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
Це хороша практика.
Вона поєднує:
- input;
- loops;
- conditions;
- arithmetic;
- variables;
- formatted output.
Дуже сильна вправа для початківців.
Не легка.
Але дуже корисна.
Міні-завдання
Створи файл:
shopping_total.py
Твоя програма має:
- запитати, скільки продуктів клієнт хоче ввести;
- повторити стільки разів;
- запитати назву продукту;
- запитати ціну продукту;
- додати ціну до total;
- вивести фінальний total.
Приклад рішення:
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;
- дозволяти тільки 3 attempts;
- вивести
"Access granted.", якщо пароль правильний; - вивести
"Access denied."після 3 неправильних attempts.
Приклад рішення:
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.")
Ця програма використовує:
while;- counter;
break;- boolean flag;
- condition після loop.
Дуже хороша практика.
Це серйозніша логіка.
Все ще не справжня security.
Але дуже хороше навчання.
Банк досі не в безпеці.
Будь ласка, тримай банк подалі від цієї лекції.
Checklist для початківців
Коли твій loop не працює, перевір:
Я зберіг файл?
Я використав двокрапку після for або while?
Тіло loop має indentation?
Мій while loop має спосіб зупинитися?
Я оновив counter?
Я правильно використовую range()?
Мені потрібно range(1, limit + 1)?
Я випадково не поставив код поза loop?
Я використав break, коли хотів зупинити loop?
Я використав continue, коли хотів пропустити тільки один прохід?
Loops потужні.
Але можуть створювати заплутані bugs.
Особливо while loops.
Завжди питай:
Що змінюється кожного разу?
Коли loop зупиниться?
Якщо ти можеш відповісти на ці два питання, ти значно безпечніший.
Якщо ні — готуйся до хаосу.
Навчального хаосу.
Але все одно хаосу.
Підсумок
Сьогодні ти вивчив:
- loops повторюють код;
forloops корисні, коли ти знаєш sequence для повторення;range()створює sequence чисел;range(5)дає від0до4;range(1, 6)дає від1до5;- loop variable змінюється на кожній iteration;
- strings можна проходити character by character;
- loops можуть містити conditions;
whileповторює, поки condition true;whileloops потребують способу зупинитися;- infinite loops трапляються, коли condition ніколи не стає false;
Ctrl + Cможе зупинити завислу програму;breakнегайно зупиняє loop;continueпропускає поточну iteration;- loops корисні для totals, counters, menus, passwords і repeated input.
Це величезний крок.
Твої програми тепер можуть повторювати роботу.
Вони можуть рахувати.
Можуть питати знову.
Можуть обчислювати totals.
Можуть показувати menus.
Можуть обробляти багато values.
Тут програмування стає набагато потужнішим.
Бо комп’ютери люблять repetition.
А люди люблять не робити нудне repetition вручну.
Чудова співпраця.
Переважно.
Наступна лекція
У наступній лекції ми вивчимо lists.
Lists дозволяють зберігати багато values в одній variable.
Замість того, щоб писати:
product1 = "Keyboard"
product2 = "Mouse"
product3 = "Notebook"
ти напишеш:
products = ["Keyboard", "Mouse", "Notebook"]
Потім loops і lists працюватимуть разом.
І саме там Python починає ставати набагато кориснішим.
Дуже сильний прогрес.
Дуже Python.