📖 Зміст
Частина 1: Світ програмування навколо нас
Частина 2: Алфавіт і словник програмування
Частина 3: Будуємо перші програми
Частина 4: Наш дивовижний мозок
Частина 5: Творчі проекти
Частина 6: Програмування в реальному світі
Частина 7: Від електрики до штучного інтелекту
Глава 11 з 27
3: Будуємо перші програми
Розділ 11: "Помилки та налагодження: вчимося на помилках"
Під час чергового візиту до Професора Біта Аліса застала його за дивним заняттям: він сидів за комп'ютером і, здавалося, був трохи роздратований.
— Що сталося, Професоре? — запитала Аліса.
— А, Алісо! — обернувся Професор. — Я намагаюся знайти помилку в моїй новій програмі. Вона повинна сортувати мої наукові статті, але чомусь працює неправильно.
— Помилки в програмах — це погано? — зацікавилась Аліса.
— Помилки — це неминуча частина програмування, — посміхнувся Професор. — Навіть найдосвідченіші програмісти припускаються помилок. Важливо вміти їх знаходити і виправляти. Цей процес називається "налагодженням".
Він на мить замовк і тихо прочитав:
Право на ошибку есть у всех,
Ведь ошибки — скрытые подсказки.
Без случайных сбоев и помех
Не бывает даже доброй сказки.
Нам не сразу видеть суждено,
Где таится путь наверх, к вершине.
Ошибаться будем всё равно,
Чтоб составить точный код машине.
Иногда так сложно понимать
Следствия падений и ушибов.
Как лекарство, нужно принимать
Горькую досаду от ошибок.
Байт підкотився до них:
— Я можу показати типові види помилок у програмуванні!
На його екрані з'явився список:
1. Синтаксичні помилки — неправильна "граматика" коду
2. Логічні помилки — код виконується, але робить не те, що потрібно
3. Помилки часу виконання — проблеми, що виникають під час роботи програми

— Синтаксичні помилки схожі на граматичні помилки в звичайному тексті, — пояснив Професор. — Наприклад, якщо ти забудеш закриваючу дужку або поставиш неправильний знак.
python
Синтаксична помилка: пропущена закриваюча дужка
print("Привіт, світ!" # Має бути: print("Привіт, світ!")Синтаксична помилка: неправильний оператор
if x = 5: # Має бути: if x == 5:
print("x дорівнює 5")— Такі помилки зазвичай легко виявити, — продовжив Професор. — Програма навіть не запуститься і одразу повідомить про проблему.
— А логічні помилки? — запитала Аліса.
— Логічні помилки підступніші, — відповіла Логік, спускаючись на стіл. — Програма запускається, але працює неправильно. Наприклад:
python
Логічна помилка: переплутано порядок дій
площа = 5 + 10 2 # Результат: 25, але правильно було б: (5 + 10) 2 = 30Логічна помилка: неправильна умова
вік = 12
if вік < 12: # Має бути: if вік <= 12:
print("Дитячий квиток")
else:
print("Дорослий квиток")— У першому прикладі програма не видасть помилку, але результат буде неправильним через невірний порядок операцій, — пояснив Професор. — У другому прикладі 12-річна дитина отримає дорослий квиток, хоча повинна отримати дитячий.
— А помилки часу виконання? — запитала Аліса.
— Це помилки, які виникають, коли програма вже запущена, — пояснив Байт. — Наприклад:
python
Ділення на нуль
x = 10
y = 0
результат = x / y # Помилка: ділення на нуль неможливеЗвернення до неіснуючого елемента списку
список = [1, 2, 3]
елемент = список[5] # Помилка: індекс 5 виходить за межі списку— Такі помилки призводять до аварійного завершення програми, якщо їх не обробити спеціальним чином, — додав Професор.
— І як же ви знаходите і виправляєте помилки? — зацікавилась Аліса.
— Для цього існує процес налагодження, — відповів Професор. — Давай я покажу тобі основні прийоми.

Професор відкрив на комп'ютері програму з помилкою:
python
def розрахувати_середнє(числа):
сума = 0
for число in числа:
сума = сума + число
середнє = сума / len(числа)
return середнєоцінки = [5, 4, 5, 3, 5]
середняоцінка = розрахуватисереднє(оцінки)
print("Середня оцінка:", середня_оцінка)
— У цій простій програмі є кілька помилок, — сказав Професор. — Давай знайдемо їх за допомогою налагодження.
1. Читання коду — перший крок у налагодженні. Уважно переглянь весь код і спробуй зрозуміти, що він повинен робити.
2. Використання налагоджувальних повідомлень — додай у код виведення проміжних значень:
python
def розрахувати_середнє(числа):
сума = 0
print("Початкова сума:", сума)
for число in числа:
сума = сума + число
print("Після додавання", число, "сума стала:", сума)
середнє = сума / len(числа)
print("Середнє:", середнє)
return середнє3. Використання налагоджувача — спеціальної програми, яка дозволяє виконувати код покроково і спостерігати за зміною змінних.
— Дивись, після виконання ми отримаємо помилку, — сказав Професор. — За налагоджувальними повідомленнями ми бачимо, що змінна сума не змінюється, хоча повинна збільшуватися. Це друкарська помилка! Ми написали сума замість сума. Ой, ні, тут помилка в іншому місці...
Насправді, після перевірки, у наведеному коді помилки немає. Але якщо б була помилка сума = сума + число замість правильної, ми б бачили це в налагоджувальних повідомленнях.
— А є ще помилки? — запитала Аліса.
— Так, у вихідному прикладі була помилка len(числа) замість правильної функції. У Python функція для визначення довжини списку називається len, правильно.
— Давай виправимо обидві помилки і подивимося, що вийде, — запропонував Професор:
python
def розрахувати_середнє(числа):
сума = 0
for число in числа:
сума = сума + число # Правильно
середнє = сума / len(числа) # Правильно
return середнєоцінки = [5, 4, 5, 3, 5]
середняоцінка = розрахуватисереднє(оцінки)
print("Середня оцінка:", середня_оцінка)
— Тепер програма працює правильно! — посміхнувся Професор, дивлячись на результат: "Середня оцінка: 4.4".
Логік додала:
— У реальному житті ми теж постійно стикаємося з помилками і виправляємо їх. Наприклад, коли ти розв'язуєш математичну задачу і отримуєш дивну відповідь, ти перевіряєш свої обчислення, щоб знайти помилку.
— А в природі є системи виправлення помилок? — запитала Аліса.
— Звичайно! — відповів Професор. — Найяскравіший приклад — ДНК. При копіюванні ДНК іноді виникають помилки, але в клітинах є спеціальні механізми для їх виявлення та виправлення. Якби таких механізмів не було, живі організми не могли б існувати.
— А як програмісти запобігають помилкам? — зацікавилась Аліса.
— Є кілька важливих практик, — відповів Професор:
1. Тестування — написання додаткового коду, який перевіряє роботу основної програми
2. Перевірка коду колегами — інші програмісти можуть помітити те, що ти пропустив
3. Використання засобів автоматичної перевірки — спеціальні програми, які шукають типові помилки
4. Обробка винятків — механізм, що дозволяє програмі коректно реагувати на помилки часу виконання
— Ось приклад обробки винятків, — показав Професор:
python
try:
число = int(input("Введіть число: "))
результат = 100 / число
print("100 /", число, "=", результат)
except ValueError:
print("Ви ввели не число!")
except ZeroDivisionError:
print("На нуль ділити не можна!")
except:
print("Сталася невідома помилка!")— Цей код намагається виконати ділення, але готовий до можливих помилок, — пояснив він. — Якщо користувач введе не число або нуль, програма не "зламається", а виведе зрозуміле повідомлення.
— Виходить, помилки — це не завжди погано? — запитала Аліса.
— Помилки — це частина процесу навчання і розвитку, — посміхнувся Професор. — Як говорив Томас Едісон: "Я не зазнав невдачі. Я просто знайшов 10000 способів, які не працюють." Важливо вчитися на помилках і ставати кращим.
Завдання
python
def порахувати_бали(відповіді):
правильні_відповіді = ["а", "б", "в", "г", "а"]
бали = 0
for і in range(len(відповіді)):
if відповіді[i] == правильні_відповіді[і]:
бали += 1
return балимої_відповіді = ["а", "б", "в", "г", "б"]
результат = порахуватибали(моївідповіді)
print("Ти набрав", результат, "балів з 5")
Після того як знайдеш і виправиш помилки, подумай: як можна покращити цей код, щоб він був більш зрозумілим і надійним?