Контроль розрахунків
Програма на Python складається з кількох команд, які ми об’єднуємо відповідним чином:
- Послідовність команд означає, що ми просто викликаємо команди одну за одною. Ми приділяємо увагу їх відбору та сортуванню.
- Умовний оператор дозволяє нам виконувати деякі команди лише за умови виконання вказаної умови.
- Ми використовуємо цикл for та цикл while для повторного виконання команди. Кожен із цих циклів має дещо різне використання, і добрим буде ретельне практикування обох.
- Керівні структури можуть бути вкладені одна в одну, наприклад, ми можемо мати умову всередині циклу. У нас є окрема тема вкладені цикли, оскільки це сфера, з якою початківці зазвичай мають проблеми.
- Ми поділяємо програми на функції, які дозволяють повторно використовувати частини коду.
Для повних початківців може бути корисно як розминку на Python виконати вправи з основ алгоритмічного мислення, де ви зможете практикувати основи використання циклів і умов у формі графічного програмування.
ВгоруУмовний оператор (if) в Python
Ми пишемо умовне виконання команди за допомогою if. Ми можемо використовувати будь-який логічний вираз як умову. Також можна умовно виконувати кілька команд. Блок команд позначаємо відступом:
if answer != 42: # команди виконуються тільки при виконанні умови:
print("Bad answer") # напишемо текст
answer = 42 # а також змінимо зміннуГілка еlse
Ми також можемо сказати, що має статися, якщо умова не виконується. Це робиться за допомогою команди else, за якою йде блок команд із відступом:
if x < 10:
print("small") # виконується, якщо умова виконується
else:
print("big") # виконується, якщо умова не виконуєтьсяОкремі варіанти обчислення називаються гілками, а умовну команду також можна назвати розгалуженням.
Багатократне розгалуження
Якщо ми хочемо перевірити кілька варіантів, ми можемо застосувати конструкцію if / elif /else. У деяких мовах програмування оператор switch використовується для багаторазового розгалуження. У нас немає цієї команди у Python, ми можемо обійтися `elif’:
if age < 6:
print("дошкільник")
elif age < 18: # перевіряється, якщо попередня умова не виконується
print("школяр")
elif age < 65: # перевіряється, якщо жодна з попередніх умов не виконується
print("дорослий ")
else: # виконується, якщо жодна з попередніх умов не застосовується
print("пенсіонер")З гілок if/elif виконується щонайбільше одна з них – та, у якої умова виконується першою, є виконаною. У наведеному прикладі, якщо в змінній age збережено значення 15, друкується лише текст «школяр». Умова age < 65 також виконується, але вона більше не оцінюватиметься.
Вкладене розгалуження
Ми також можемо вкладати умовні команди, тобто деякі з гілок можуть мати подальше розгалуження. Потім нам потрібно збільшити зсув для наступних гілок. Отже, ми можемо написати:
if choice == "tea":
if money >= 10:
print("ok")
else:
print("refuse")
else:
print("not available")
if n % 2 == 1:
if x > 13:
print("Win!")Проте в деяких випадках простіше і зрозуміліше послуговуватися простим умовним оператором з умовою, що використовує логічні операції замість вкладеного коду. Як-от, ми можемо спростити другий приклад так:
if n % 2 == 1 and x > 13:
print("Win!")Цикл for в Python
Ми послуговуємося циклами у програмуванні для повторення групи команд. Ми зазвичай називаємо повторення терміном ітерація.
Ми використовуємо цикл for, якщо заздалегідь знаємо, скільки повторень матиме цикл. У інших випадках користуємося циклом while.
Простий цикл for
Основним застосуванням циклу for є просто повторення набору команд. Використовуючи for i in range(10), ми повторюємо набір команд 10 разів. Команди, які потрібно повторити, мають містити відступ. Ось як ми пишемо Привіт десять разів:
for i in range(10):
print("Привіт")Керуюча змінна
Під час циклу значення керуючої змінної (у наведеному вище прикладі це i) змінюється. Тож у кожній ітерації циклу ми можемо робити щось дещо інше залежно від поточного значення цієї змінної. Яких значень набуває керуюча змінна, визначається частиною після in. Якщо ми використовуємо базовий range, керуюча змінна буде поступово збільшуватися на одиницю. Наприклад, цей цикл друкує числа від 0 до 9:
for i in range(10):
print(i)У межах циклу ми можемо використовувати декілька змінних, але лише для керуючої змінної значення змінюється автоматично. Розглянемо цей приклад:
y = 1
z = 2
for x in range(10):
y = x + y + z
print(x, y, z)Керуючою змінною циклу є x, значення якої змінюватиметься поступово (від 0 до 9). Для змінної y значення зміниться, оскільки в циклі ми маємо оператор присвоєння y. Значення змінної z залишатиметься незмінним у всіх ітераціях, оскільки z не є керуючою змінною, і ми нічого не призначаємо їй у циклі.
Використання range
У базовому використанні ми поєднуємо цикл for із функцією range, яка повертає інтервал чисел, а керуюча змінна згодом отримує значення з цього інтервалу.
Увага: в інформатиці ми часто рахуємо від нуля (а не від одиниці, як звичайні люди). Ми також зустрічаємося з цим і тут: range(n) повертає значення від 0 до n-1.
Якщо ми введемо два параметри у функцію range, тобто викличемо range(a, b), це дасть нам інтервал чисел від a до b-1. Ми також можемо ввести третій параметр, який визначає довжину стрибка. Приклади:
for x in range(5, 13): print(x, end=" ") # 5 6 7 8 9 10 11 12
for x in range(5, 16, 3): print(x, end=" ") # 5 8 11 14
for x in range(8, 0, -1): print(x, end=" ") # 8 7 6 5 4 3 2 1Цикл for можна використовувати не лише разом із range, а й у більш загальному вигляді. Наприклад, ми можемо послуговуватися списками:
for x in [3, 7, 10]:
print(x)Приклади використання циклу for
Перелік інформації про парність і непарність перших n чисел:
n = 20
for i in range(1, n+1):
if i % 2 == 0:
print(i, "парне")
else:
print(i, "непарне")Обчислення суми чисел від 1 до n:
n = 10
s = 0
for i in range(1, n+1):
s = s + i
print("Сума чисел від 1 до", n, "є", s)Перелік інформації про перші n ступенів двійки:
n = 10
for x in range(1, n+1):
print("Два в степені", x, "це", 2**x)Цикл while в Python
Ми використовуємо цикли у програмуванні для повторення групи команд. Ми часто називаємо повторення терміном ітерація.
Ми використовуємо цикл while, якщо не знаємо наперед, скільки разів цикл повторюватиметься. Якщо ми знаємо кількість повторень заздалегідь, ми використовуємо цикл for.
Основне використання
Цикл while повторюється, поки не виконається керівна умова циклу (у прикладі нижче це n > 5). Тіло циклу (команди, які мають повторюватися) позначаються відступом.
n = 5
while n > 0:
print("Це буде написано п'ять разів.")
n = n - 1Ми використовуємо цей цикл для запису ступенів двійки, які не більші за 100:
n = 1
while n < 100:
print(n)
n = n * 2Нуль і нескінченність повторень
Умова оцінюється ще перед першим виконанням тіла циклу. Якщо вона не виконується, то тіло циклу while не виконується жодного разу:
n = 200
while n < 100:
print("Це не пишеться.")Може статися, що цикл while ніколи не закінчується. Ця програма нескінченно друкує одиниці:
n = 1
while n < 100:
print(n)Такий нескінченний цикл зазвичай означає помилку у програмі. Типовим є те, що ми забуваємо змінити в тілі циклу значення змінної, яка з’являється в умові циклу.
ВгоруВнутрішні цикли в Python
Для повторення команд використовуються основні цикл for і цикл while.
Тіло циклу може містити не лише основні команди, а й інший цикл – ми називаємо його вкладеним циклом. Для його використання не потрібна нова команда. Ми просто пишемо (і відкладаємо) цикл всередині іншого циклу. Однак навички роботи з вкладеними циклами варто тренувати, саме ця тема є частим джерелом проблем.
Приклад:
n = 5
for i in range(n):
for j in range(n):
print(i+j, end=" ")
print()Ця програма виводить таку таблицю:
0 1 2 3 4
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8Внутрішній цикл (з керуючою змінною j) друкує окремі рядки. Потім зовнішній цикл (з керуючою змінною i) організовує запис усієї таблиці. Цей приклад наочно показує важливу роль правильного відступу. Команда print() викликає розриви рядків – ми використовуємо її у програмі щоразу після друку повного рядка.
Що станеться, якщо відступ команди
print() ми збільшимо або зменшимо?
- Якщо зробити відступ
print()нижче на один рівень:- Це було б частиною внутрішнього циклу, і тоді новий рядок ставився б після кожного числа.
- Результатом роботи програми буде ряд чисел одне під одним.
- Якщо б ми зробили відступ
print()на один рівень вище:- Команда була б записана поза циклом, тому розрив рядка буде зроблено лише один раз у самому кінці.
- Якщо б ми зробили відступ
- Результатом програми буде ряд чисел в одному рядку.
Функції в Python
Функція – це іменований блок команд. Ми можемо передавати аргументи функціям. Функція зі свого боку повертає значення.
Визначення функції
Python пропонує цілий набір вбудованих функцій, тобто таких, які вже підготували творці мови. Прикладом є функція `len’, яка обчислює довжину рядка.
Ми визначаємо нашу власну функцію за допомогою ключового слова def:
def say_hello(name):
print("Hello", name)Таким чином, ми визначили функцію say_hello, яка має параметр name. Функція також може мати більше параметрів.
Виклик функції
Просто тому що ми визначаємо функцію, вона ще не виконується. Щоб функція виконувалася, нам потрібно її викликати. Ми робимо це, записуючи назву функції та передаючи певний аргумент у дужках:
say_hello("Alice") # напиши Hello Alice
say_hello("Bob") # напиши Hello BobДеякі функції не мають параметрів. Нам все ще потрібно включати дужки під час їх виклику, наприклад, say_goodbye().
Повернене значення
Функція може повертати якесь значення, використовуючи ключове слово return. Наступна функція обчислює та повертає факторіал.
def factorial(n):
f = 1
for i in range(1, n+1):
f = f*i
return fТака функція сама по собі нічого не робить, вона просто повертає значення, з яким ми можемо працювати далі.
factorial(5) # рахує значення факторіалу 5, але потім це значення
# ніяк далі не використовує
print(factorial(4)) # цього разу випишемо результат рахунку
x = factorial(6) # цей результат збережеться до змінної
print(x) # а потім можна виписати значення цієї змінноїКоманда return завершує виконання функції. Таким чином, коли викликається така функція, друкується лише foo:
def test():
print("foo")
return 0
print("bar")Різниця між return та print
Частим джерелом проблем для початківців є правильне розрізнення між використанням print і return у функціях.
Використання print приводить до негайного виведення значення, але ви не можете працювати з цим значенням далі якимось іншим способом.
Використання return завершує роботу функції та повертає значення. Воно не виписується автоматично, але ми можемо призначити його змінній і продовжувати з ним працювати.