Курси програмування для дітей безкоштовно

20. Модульний код у Python або вчимося робити рефакторинг

Модульний код у Python | Python для дітей | ITisFuture

Модульний код у Python дозволить вам вивести програми на новий рівень. Це один з перших кроків на шляху до ідеального коду: рефакторингу. А покращень ніколи не буде замало!

Правила у програмуванні

Дотримуватися правил — це не про “нудну дисципліну”, а про розумний стиль програмування. Коли ваш код охайний, зрозумілий і логічний — ви ніби створюєте власний маленький світ, де все продумано й працює чітко, як задумано. В цьому світі легко розібратися, тому і вам і іншим буде легше додавати туди нові фічі та можливості, а значить розвивати його і робити кращим. У гарно написаному коді важче сховатися багам, а процес розробки легкий і приємний.
Такий код легше покращувати, показувати іншим і навіть пишатися ним 🦸‍♀️
Адже справжні програмісти не просто “щоб працювало”, а роблять красиво і з розумом.
Це як у грі: можна пройти рівень якось, а можна — з комбо, бонусом і стилем! 🎮🔥

Програмісти навіть мають свою філософію про те, як писати красивий і зрозумілий код. Є кількасот книг на 400+ сторінок на тему “Патернів програмування”, де пояснюється, як правильно спроєктувати новесенький проєкт так, щоб коли він розростеться до величезного монстрика, його все одно було зручно редагувати й дописувати.

Рекомендую пізніше прочитати цю книгу. А поки розберемося зі спрощеними правилами:

Патерни програмування Модульний код у Python | Python для дітей | ITisFuture

🎯 1. Не повторюйте код (DRY — Don’t Repeat Yourself)

💡Ідея: Якщо пишете одне й те саме кілька разів — зробіть функцію або цикл!
🧠 Чому: Менше коду, менше шансів помилитися, легше змінювати.

Погано:

print("🧙 Маг атакує вогнем! -20 HP")
print("🧙 Маг атакує вогнем! -20 HP")
print("🧙 Маг атакує вогнем! -20 HP")

Добре:

def fire_attack():
    print("🧙 Маг атакує вогнем! -20 HP")

for i in range(3):
    fire_attack()

💬 2. Давайте змінним і функціям зрозумілі імена

💡Ідея: Ім’я має підказувати, що робить код.
🧠 Чому: Програму має бути легко зрозуміти навіть через тиждень.

Погано:

def f(x):
    print(x * 10)

Добре:

def add_score(points):
    print("🏆 Твій рахунок:", points * 10)

⚙️ 3. Розбивайте код на частини (функції чи файли)

💡Ідея: Код — це як гра з рівнями: кожен рівень (функція) має свою задачу.
🧠 Чому: Легше тестувати, лагодити й розвивати програму.

Погано:

print("🚶‍♂️ Гравець рухається вперед")
print("⚔️ Гравець атакує монстра -20 HP")
print("🧟 Монстр атакує у відповідь -10 HP")
print("🎉 Перемога! Гравець отримує 50 XP")

Добре:

def move_player():
    print("🚶‍♂️ Гравець рухається вперед")

def attack_enemy():
    print("⚔️ Гравець атакує монстра -20 HP")

def enemy_attack():
    print("🧟 Монстр атакує у відповідь -10 HP")

def win_game():
    print("🎉 Перемога! Гравець отримує 50 XP")

# 🎮 Основний сценарій гри:
move_player()
attack_enemy()
enemy_attack()
win_game()

🧩 4. Коментуйте свій код (але з розумом)

💡Ідея: Коментар — це як підказка в грі 🗺️
🧠 Чому: Він допомагає іншим (і вам майбутньому!) зрозуміти, що відбувається у програмі.

Порада: Не коментуйте очевидне, але пояснюйте навіщо щось зроблено, якщо це не очевидно.Коментарі — як нотатки в грі: не пишеш усе підряд, лише те, що допоможе виграти. 😉

Поганий код. Меми про ІТ та програмування для дітей Модульний код у Python | Python для дітей | ITisFuture

Погано:

hp = 100
hp -= 25
print(hp)

Добре:

hp = 100  # 💚 Початкове здоров’я гравця
hp -= 25  # 😵 Отримано шкоду від ворога
print(hp)  # 🔢 Показуємо залишок HP

🎮 5. Краще створити одну функцію з параметрами аніж кілька схожих

💡 Ідея: У грі ваш герой може атакувати по-різному — мечем, магією або луком.
Замість трьох окремих функцій для кожного виду атаки — зробимо одну, але з параметром типу атаки 💥

“Стратегія” — це як вибрати, яким способом атакувати. Ви не створюєте три різні функції – просто змінюєте параметр, і герой поводиться по-іншому.
🧠Чому: Можна розширити:Додати нові стилі — наприклад, "laser", "kick", "summon_dragon" — без зміни решти коду!

Поганий код. Меми про ІТ та програмування для дітей Модульний код у Python | Python для дітей | ITisFuture

Погано:

def attack_with_sword():
    print("🗡️ Герой б’є мечем! -15 HP ворогу")

def attack_with_magic():
    print("✨ Герой кидає вогняну кулю! -20 HP ворогу")

def attack_with_bow():
    print("🏹 Герой стріляє з лука! -10 HP ворогу")

# Використання:
attack_with_sword()
attack_with_magic()
attack_with_bow()

Добре:

def attack(style):
    if style == "sword":
        print("🗡️ Герой б’є мечем! -15 HP ворогу")
    elif style == "magic":
        print("✨ Герой кидає вогняну кулю! -20 HP ворогу")
    elif style == "bow":
        print("🏹 Герой стріляє з лука! -10 HP ворогу")
    else:
        print("🤷 Невідомий стиль атаки!")

# Використання:
attack("sword")
attack("magic")
attack("bow")

Практика. Модульний код у Python

Готуємо середовище

Сьогодні ми попрактикуємося на програмці, яка перетворює текст у звук. Ми застосуємо до програми правила написання гарного коду і трохи покращимо програмку.

0: Налаштуємо python. У VS Code перейдіть у меню View → Terminal (або Ctrl + ~). У терміналі напишіть:

python --version


або

python3 --version

Якщо хоч одна з команд запрацювала і видала версію – python є в системі. Якщо видає помилку, або тільки слово Python без версії : його треба завантажити та перевстановити з сайту python.org/downloads. Під час інсталяції обов’язково відмітити «Add Python to PATH». Після перевстановлення закрийте і відкрийте знову VS Code і повторіть команду з перевіркою версії

Далі перевіримо, чи встановлено пакетний менеджер pip. Він дозволяє ставити потрібні пакети й бібліотеки, щоб писати на python складніші й різноманітніші програми. В терміналі пишемо:

pip --version


або

python -m pip --version

Якщо показує версію, pip вже встановлений. Якщо ні, встановимо(це встановить pip або оновить його до останньої версії):

python -m ensurepip --upgrade

Можете ще раз запустити команду перевірки (стрілки вгору вниз можуть видавати попередні команди). Працює! Ідемо далі

1: Встановлюємо потрібну бібліотеку. У VS Code перейдіть у меню View → Terminal (або Ctrl + ~). У терміналі напишіть:

pip install gTTS pygame

2: Додамо потрібні розширення до VSCode, щоб він краще розумів Python і підказував нам, якщо ми пишемо щось не так. Зліва знаходимо меню Extentions (Розширення), це ось такі квадратики:

VSC як конструктор, що туди поставиш, з тим він і вмітиме працювати. Нам треба буде розширення Python Extension Pack та Code Runner. В пошуку пропишіть перший, натисніть Install. Повторіть те саме з другим. Друге розширення додасть зручну кнопочку для запуску програм.

Рефакторинг коду

3: А ось і код для рефакторингу і моделювання:

from gtts import gTTS
from pygame import *
import os
import time

tts = gTTS("Привіт, як твої справи?", lang="uk")
tts.save("voice.mp3")


mixer.init()
mixer.music.load("voice.mp3")
mixer.music.play()


while mixer.music.get_busy():
    time.sleep(0.5)

mixer.music.unload()
mixer.quit()
os.remove("voice.mp3")
Поганий код. Меми про ІТ та програмування для дітей Модульний код у Python | Python для дітей | ITisFuture

Скопіюйте його собі й запустіть. Код має озвучити речення, яке є у програмі

4: Перше, що зробимо з незнайомим кодом – розбираємо рядок за рядком і коментуємо все, що не зрозуміло. Це допоможе далі швидше орієнтуватися в коді. Нижче наведені коментарі, але їх порядок перемішаний. Додайте коментар перед кожним рядком, який не зрозумілий (не обов’язково коментувати все, тільки ті рядки, по якім треба підказки)

# Ініціалізуємо мікшер pygame для роботи зі звуком
# Цикл чекає, поки музика відтворюється
# Пауза на 0.5 секунди, щоб цикл не перевантажував процесор
# Імпортуємо клас gTTS з бібліотеки gtts для перетворення тексту в мову
# Видаляємо тимчасовий mp3 файл з диску
# Завантажуємо наш mp3 файл у мікшер
# Відтворюємо звук
# Створюємо об’єкт gTTS з текстом "Привіт, як твої справи?" та мовою українська
# Імпортуємо модуль time для пауз під час відтворення аудіо
# Зберігаємо згенеровану мову у файл "voice.mp3"
# Завершуємо роботу мікшера pygame
# Розвантажуємо поточний звуковий файл з пам’яті
# Імпортуємо модуль os для роботи з файлами (видалення файлів)
# Імпортуємо все з модуля pygame для роботи зі звуком
Поганий код. Меми про ІТ та програмування для дітей Модульний код у Python | Python для дітей | ITisFuture

5: Подумайте як зробити наступні зміни у програмі (робити їх поки не треба, але варто уявити собі план змін в поточній програмі без рефакторингу):

  1. Програма має попросити користувача ввести з консолі кілька фраз і озвучити кожну з них.
  2. Програма має працювати з кількома мовами, наприклад англійською й українською.
  3. Програма має зачитувати список фраз

Великі треба зміни й багато нового коду, егеж? А якщо ми відрефакторимо програму спочатку?

6: Створімо функції. Зверніть увагу на нове оформлення функцій і параметрів, на коментарі. Замість іншопланетян 👽👽👽 вставте частину коду з початкової програми, яку варто помістити у функції.


def text_to_speech(phrase: str, lang: str = "uk") -> str:
    """
    Функція озвучує переданий текст і зберігає його у mp3 файл з унікальною назвою.
    
    Параметри:
    phrase (str) : Текст, який потрібно озвучити
    lang (str)   : Мова озвучення (за замовчуванням українська "uk")
    
    Повертає:
    str : назва збереженого mp3 файлу
    """
    # Додаємо випадкове число до назви файлу для унікальності
    filename = f"voice_{random.randint(1000, 9999)}.mp3"
    
    👽👽👽
    
    return filename

7: Те саме для другої функції. Тут в код додали try-catch. Пригадайте навіщо він використовується ? Навіщо його додано у цю функцію ?


def delete_file(filename: str) -> bool:
    """
    Функція видаляє файл з диску.
    
    Параметри:
    filename (str) : Назва файлу для видалення
    
    Повертає:
    bool : True, якщо файл видалено успішно, False, якщо сталася помилка
    """
    try:
        👽👽👽
        return True
    except Exception as e:
        print(f"Помилка при видаленні файлу: {e}")
        return False

8: Тепер внизу допишемо код основної програми. Перевірте, що функції запрацювали:

file: str = text_to_speech("Привіт, як твої справи?", "uk")
success: bool = delete_file(file)
print("Файл видалено:", success)

9: За допомогою input попросіть користувача обрати мову і ввести фразу для перекладу. Програма має озвучити фразу обраною мовою. Приклад роботи:

Вибери мову: 1- українська, 2- англійська, 3-іспанська: 2
Введи фразу для озвучки: To be or not to be
Файл видалено: True

10: Створіть цикл в якому користувачу кілька разів пропонується обрати мову і ввести фразу. Додайте можливість виходу з циклу (наприклад користувач має ввести відповідне слово чи цифру)

Уроки програмування для дітей. Домашня робота

Домашня робота

1: За допомогою pip встановіть бібліотеки для кольорового тексту:

pip install colorama rich

2: Відрефакторіть подану програму:

  1. додайте коментарі
  2. додайте функцію друку таблички в параметри передайте кольори.
  3. викличте функції й перевірте, що програма працює.

from colorama import init, Fore, Back, Style
from rich.console import Console
from rich.table import Table

init(autoreset=True)

print(Fore.RED + “Цей текст червоний”)
print(Back.YELLOW + “Тло жовте”)

console = Console()

table = Table(title=”Таблиця оцінок”)

table.add_column(“Ім’я”, justify=”left”, style=”cyan”, no_wrap=True)
table.add_column(“Математика”, justify=”center”, style=”magenta”)
table.add_column(“Фізика”, justify=”center”, style=”green”)

table.add_row(“Аня”, “12”, “14”)
table.add_row(“Богдан”, “15”, “16”)
table.add_row(“Катя”, “14”, “15”)

console.print(table)

Поганий код. Меми про ІТ та програмування для дітей | Python для дітей | ITisFuture

3: Додайте у ваш код функцію colored_text. Додайте ще 2-3 кольори до неї. Схожим чином створіть функцію print_colored_background. Викличте функції в основній програмі:

  • виведіть відому крилату фразу за допомогою colored_text
  • виведіть ім’я першої вчительки за допомогою print_colored_background
  • виведіть побажання за допомогою colored_text
  • виведіть улюблене слово іноземною мовою за допомогою print_colored_background
def colored_text(text: str, color: str = "RED") -> str:
    """
    Повертає текст у заданому кольорі.
    
    Параметри:
    text : str - Текст для виводу
    color : str - Колір тексту (RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE)
    
    Повертає:
    str - Текст з кольором
    """
    color_dict = {
        "RED": Fore.RED,
        "GREEN": Fore.GREEN,
    }
    return color_dict.get(color.upper(), Fore.WHITE) + text

Уроки програмування для дітей ускладнені завдання level up

Level Up!
Модульний код у Python

1: Відрефакторіть ще програму з домашки:
А) створіть словник колонок таблиці (ім’я і 3-4 предмети):
columns = { “Ім’я”: “cyan”,… }
Створіть функцію, яка малюватиме колонки за даними з цього списку.

2: Створіть список студентів і оцінок:
[(“Аня”, 12, 14),…]
Створіть функцію, яка заповнюватиме таблицю даними з цього списку. Якщо для якоїсь колонки немає оцінки вона має залишитися пустою

Модульний код у Python | Python для дітей | ITisFuture

Не зупиняйтесь у вивченні Python! До зустрічі на наступних уроках!

Залишити коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *