3.5. Модулі. Використання модулів у проєктах

Зміст

ГОТУЄМОСЬ ДО ВИВЧЕННЯ НОВОГО МАТЕРІАЛУ

1. Чим груповий проєкт відрізняється від індивідуального?

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

2. Як зробити так, щоб результати виконання одного проєкту можна було б у подальшому використати в інших проєктах?

Для повторного використання результатів проєкт необхідно проектувати за модульним принципом, розділяючи його на окремі функціональні блоки (файли-модулі) з обмеженою кількістю взаємозв’язків, які зберігаються в окремих файлах та можуть підключатися до інших проєктів за допомогою інструкцій імпортування.

ПОМІРКУЙТЕ

Як ви організовували роботу групи, виконуючи груповий проєкт?

Робота групи організовувалася шляхом декомпозиції проєкту на окремі програмні модулі, розподілу обов’язків між учасниками команди відповідно до їхніх навичок, встановлення термінів виконання завдань, а також проведення регулярних обговорень для контролю проміжних результатів та узгодження процесу інтеграції модулів.

Які переваги і недоліки, на вашу думку, є під час групової роботи над проєктом?

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

ПРИГАДАЙТЕ

Що таке функція в мові програмування Python?

Функція в мові програмування Python — це пойменована частина програми (блок коду), призначена для виконання певного завдання, яку можна викликати з різних місць програми необхідну кількість разів, передаючи їй вхідні значення та отримуючи результат роботи.

ПРИГАДАЙТЕ

Для чого у проєктах використовуються функції?

Функції у проєктах використовуються для структурування коду, уникнення дублювання однакових фрагментів, полегшення процесу налагодження програмного коду та підвищення його читабельності шляхом розбиття великої задачі на менші підзадачі.

Як ви під час створення віконних проєктів імпортували команди модуля tkinter?

Під час створення віконних проєктів команди модуля tkinter імпортувалися за допомогою конструкції from tkinter import *, яка підключає всі функції, константи та методи цього модуля для роботи з вікном та іншими графічними об’єктами.

ПРАЦЮЄМО З КОМП’ЮТЕРОМ

Задача 1. Створіть модуль, до якого включіть функцію, яка створює список із перших n чисел Фібоначчі. Використайте цю функцію в основній частині проєкту, у якій обчисліть суму перших n чисел Фібоначчі.

Дано:

  • $n$ — кількість чисел у послідовності
  • $F_i = F_{i-2} + F_{i-1}$ — закон утворення чисел Фібоначчі

Знайти:

  • Файл-модуль mymodul2.py з функцією генерації списку
  • Основний файл проєкту вправа 3.5.1.py для обчислення суми

Розв’язання:

Код файлу-модуля mymodul2.py:

def fb(n):
    # Створюємо початковий список із перших двох чисел Фібоначчі
    a = [1, 1]
    for i in range(2, n):
        # Обчислюємо наступне число як суму двох попередніх
        x = a[i-2] + a[i-1]
        a.append(x)
    return a

Код основного файлу проєкту вправа 3.5.1.py:

import mymodul2

n = int(input('Уведіть кількість чисел Фібоначчі: '))
b = mymodul2.fb(n)

if n == 1:
    s = 1
    print(b[0])
else:
    print(*b)
    s = sum(b)

print('Сума перших ', n, ' чисел Фібоначчі: ', s)

ДАЙТЕ ВІДПОВІДІ НА ЗАПИТАННЯ

1. Що таке модулі у проєкті? Навіщо їх використовують?

Модулі у проєкті — це окремі частини, з яких складається комп’ютерний проєкт. У мові програмування Python модулі є окремими файлами з розширенням .py, які містять програмний код: функції, змінні, класи тощо. Їх використовують для спрощення створення, налагодження й тестування великих та складних проєктів, а також для ефективного розподілу роботи між розробниками.

2. Які переваги використання модулів у комп’ютерних проєктах?

Перевагами використання модулів у комп’ютерних проєктах є:

  • Покращена організація коду: модульність структурує програмний код, робить його читабельним та зрозумілим.
  • Повторне використання коду: один раз створений модуль можна підключати в інші частини проєкту чи інші проєкти, що економить час.
  • Спрощення створення, налагодження і тестування: окремі модулі простіше розробляти й тестувати окремо завдяки їхній обмеженій функціональності та ізольованості.
  • Полегшення командної розробки: програмісти можуть одночасно працювати над різними модулями, не заважаючи один одному.
  • Полегшення внесення змін: редагування коду в одному модулі зазвичай не потребує переписування інших частин проєкту.
  • Зменшення обсягу коду: зменшується кількість дубльованого коду в системі.
  • Ізоляція помилок: якщо помилка виникає в одному модулі, вона, як правило, не впливає безпосередньо на працездатність інших незалежних частин проєкту.

3. Як створити і використати модулі у проєкті мовою програмування Python?

Для створення модуля в Python необхідно написати програмний код у файлі та зберегти його з розширенням .py. Для використання цього модуля в основному файлі проєкту його підключають за допомогою ключового слова import, вказавши ім’я файлу без розширення. Виклик функцій з імпортованого модуля здійснюється через крапку: ім’я_модуля.ім’я_функції(). Також можна імпортувати окремі функції за допомогою конструкції from ім’я_модуля import ім’я_функції.

4. Скільки функцій може містити модуль і чи всі з них потрібно використовувати у проєкті?

Модуль може містити будь-яку кількість функцій. Під час розробки проєкту немає потреби використовувати всі наявні в модулі функції — розробник викликає лише ті з них, які необхідні для розв’язання конкретної задачі.

ОБГОВОРІТЬ І ЗРОБІТЬ ВИСНОВКИ

1. Як краще: створити один модуль і включити до нього багато різноманітних функцій чи для кожної функції створювати свій окремий модуль? Відповідь обґрунтуйте.

Найбільш раціональним підходом є створення модулів, які об’єднують логічно пов’язані між собою функції (наприклад, окремо для математичних обчислень, окремо для роботи з текстом чи інтерфейсом). Створення одного величезного модуля з різноплановими функціями ускладнить орієнтування в коді та його тестування, а створення окремого файлу для кожної поодинокої функції призведе до появи занадто великої кількості файлів у проєкті та заплутаності в імпортах.

2. Чи не доцільніше було б просто включити функцию з модуля в основний файл проєкту? Відповідь обґрунтуйте.

Включення функції безпосередньо в основний файл проєкту є зручним лише для невеликих одноразових програм. Винесення функцій в окремі модулі є значно доцільнішим, оскільки це запобігає дублюванню коду, дозволяє багаторазово використовувати створені функції в інших проєктах без потреби копіювати їх вручну, спрощує структуру основного файлу програми, а також полегшує процес командної розробки та усунення помилок.

ВИКОНАЙТЕ ЗАВДАННЯ

1. Створіть проєкт, у якому модуль містить функцію, яка відокремлює останню цифру числа. Збережіть модуль у вашій папці у файлі з іменем modul1.py. Використайте цей модуль в основній частині проєкту для визначення, чи ділиться введене натуральне число на 5. Збережіть основний файл проєкту у вашій папці у файлі з іменем завдання 3.5.1.py.

Файл-модуль modul1.py:

def get_last_digit(number):
    """Функція повертає останню цифру цілого числа"""
    return number % 10

Основний файл проєкту завдання 3.5.1.py:

import modul1

try:
    num = int(input("Введіть натуральне число: "))
    if num <= 0:
        print("Помилка! Введене число має бути натуральним (більшим за 0).")
    else:
        # Використовуємо функцію з імпортованого модуля
        last_digit = modul1.get_last_digit(num)
        
        # Перевірка діленості на 5 за останньою цифрою
        if last_digit == 0 or last_digit == 5:
            print(f"Число {num} ділиться на 5, оскільки його остання цифра дорівнює {last_digit}.")
        else:
            print(f"Число {num} не ділиться на 5, оскільки його остання цифра дорівнює {last_digit}.")
except ValueError:
    print("Помилка! Будь ласка, введіть коректне ціле число.")

2. Створіть проєкт, у якому модуль містить функцію, яка відокремлює дві останні цифри числа. Збережіть модуль у вашій папці у файлі з іменем modul2.py. Використайте цей модуль в основній частині проєкту для визначення, чи ділиться введене натуральне число на 4. Збережіть основний файл проєкту у вашій папці у файлі з іменем завдання 3.5.2.py.

Для реалізації проєкту створено модуль modul2.py та основний файл проєкту завдання 3.5.2.py.

Код файлу-модуля modul2.py:

def get_last_two_digits(number):
    return number % 100

Код основного файлу проєкту завдання 3.5.2.py:

import modul2

number = int(input("Введіть натуральне число: "))
last_two = modul2.get_last_two_digits(number)

if last_two % 4 == 0:
    print(f"Число {number} ділиться на 4, оскільки число з його останніх двох цифр ({last_two}) ділиться на 4.")
else:
    print(f"Число {number} не ділиться на 4, оскільки число з його останніх двох цифр ({last_two}) не ділиться на 4.")

3. Створіть проєкт, у якому модуль містить функцію, яка відокремлює першу літеру слова. Збережіть модуль у вашій папці у файлі з іменем modul3.py. Використайте цей модуль в основній частині проєкту для визначення, скільки слів у списку розпочинаються з літери «а». Збережіть основний файл проєкту у вашій папці у файлі з іменем завдання 3.5.3.py.

Для реалізації проєкту створено модуль modul3.py та основний файл проєкту завдання 3.5.3.py.

Код файлу-модуля modul3.py:

def get_first_letter(word):
    if len(word) > 0:
        return word[0]
    return ""

Код основного файлу проєкту завдання 3.5.3.py:

import modul3

words = ["ананас", "яблуко", "абрикос", "банан", "апельсин", "груша"]
count = 0

for word in words:
    if modul3.get_first_letter(word).lower() == 'а':
        count += 1

print(f"Список слів: {words}")
print(f"Кількість слів, що розпочинаються з літери 'а': {count}")

4. Створіть проєкт, у якому модуль містить функцію, яка визначає, чи є певне слово паліндромом. Збережіть модуль у вашій папці у файлі з іменем modul4.py. Використайте цей модуль в основній частині проєкту для визначення, скільки слів у рядку є паліндромами. Збережіть основний файл проєкту у вашій папці у файлі з іменем завдання 3.5.4.py.

Для реалізації проєкту створено модуль modul4.py та основний файл проєкту завдання 3.5.4.py.

Код файлу-модуля modul4.py:

def is_palindrome(word):
    cleaned_word = word.lower()
    return cleaned_word == cleaned_word[::-1]

Код основного файлу проєкту завдання 3.5.4.py:

import modul4

text = input("Введіть рядок зі словами (через пропуск): ")
words = [word.strip(".,!?\"';:") for word in text.split()]
palindrome_count = 0

for word in words:
    if len(word) > 0 and modul4.is_palindrome(word):
        palindrome_count += 1

print(f"Кількість слів-паліндромів у рядку: {palindrome_count}")

5. Створіть проєкт, у якому модуль містить три функції: чи існує трикутник із заданими довжинами сторін, обчислює периметр трикутника за трьома його сторонами, обчислює площу трикутника за трьома його сторонами. Збережіть модуль у вашій папці у файлі з іменем modul5.py. Використайте цей модуль в основній частині проєкту для визначення периметра і площі трикутника, якщо трикутник з уведеними довжинами сторін існує. Збережіть основний файл проєкту у вашій папці у файлі з іменем завдання 3.5.5.py.

Для реалізації проєкту створено модуль modul5.py та основний файл проєкту завдання 3.5.5.py.

Код файлу-модуля modul5.py:

import math

def is_valid_triangle(a, b, c):
    return (a + b > c) and (a + c > b) and (b + c > a)

def get_perimeter(a, b, c):
    return a + b + c

def get_area(a, b, c):
    p = get_perimeter(a, b, c) / 2
    return math.sqrt(p * (p - a) * (p - b) * (p - c))

Код основного файлу проєкту завдання 3.5.5.py:

import modul5

print("Введіть довжини сторін трикутника:")
a = float(input("Сторона a: "))
b = float(input("Сторона b: "))
c = float(input("Сторона c: "))

if modul5.is_valid_triangle(a, b, c):
    perimeter = modul5.get_perimeter(a, b, c)
    area = modul5.get_area(a, b, c)
    print(f"Трикутник зі сторонами {a}, {b}, {c} існує.")
    print(f"Периметр трикутника: {perimeter}")
    print(f"Площа трикутника: {area:.2f}")
else:
    print(f"Трикутник зі сторонами {a}, {b}, {c} не існує.")

6. Оформте метод вибору сортування списку як модуль. Збережіть модуль у вашій папці у файлі з іменем sortselection.py. Використайте його для створення проєкту для розв’язання задачі, умову якої придумайте самі. Збережіть основний файл проєкту у вашій папці у файлі з іменем завдання 3.5.6.py.

Для реалізації проєкту створено модуль sortselection.py та основний файл проєкту завдання 3.5.6.py.

Умова задачі: Отримано результати забігу на 100 метрів для групи спортсменів (у секундах). Необхідно відсортувати ці результати від найкращого (найменшого часу) до найгіршого (найбільшого часу) для визначення черговості фінішування.

Код файлу-модуля sortselection.py:

def selection_sort(arr):
    n = len(arr)
    for i in range(n):
        min_idx = i
        for j in range(i + 1, n):
            if arr[j] < arr[min_idx]:
                min_idx = j
        arr[i], arr[min_idx] = arr[min_idx], arr[i]
    return arr

Код основного файлу проєкту завдання 3.5.6.py:

import sortselection

results = [11.5, 10.9, 12.1, 11.2, 10.8, 11.7]

print(f"Початкові результати забігу: {results}")

sorted_results = sortselection.selection_sort(results)

print(f"Відсортовані результати (від лідера до аутсайдера): {sorted_results}")

7. Оформте метод обміну сортування списку як модуль. Збережіть модуль у вашій папці у файлі з іменем sortbubble.py. Використайте його для створення проєкту для розв’язання задачі, умову якої придумайте самі. Збережіть основний файл проєкту у вашій папці у файлі з іменем завдання 3.5.7.py.

Вміст файлу-модуля sortbubble.py:

def bubble_sort(lst):
    n = len(lst)
    for i in range(n):
        for j in range(0, n - i - 1):
            if lst[j] > lst[j + 1]:
                lst[j], lst[j + 1] = lst[j + 1], lst[j]
    return lst

Умова задачі:
Дано список результатів бігу учнів на 100 метрів (у секундах). Необхідно впорядкувати результати від найкращого (найменшого часу) до найгіршого.

Вміст основного файлу проєкту завдання 3.5.7.py:

import sortbubble

# Список результатів учнів у секундах
results = [14.5, 12.8, 15.2, 13.1, 14.0, 13.7]
print("Початкові результати забігу:", results)

# Використання функції сортування бульбашкою з підключеного модуля
sorted_results = sortbubble.bubble_sort(results)
print("Впорядковані результати (від найкращого часу):", sorted_results)

ГОТУЄМОСЬ ДО ВИВЧЕННЯ НОВОГО МАТЕРІАЛУ

1. Які види графіки ви знаєте?

Існують такі основні види комп’ютерної графіки, як растрова, векторна, тривимірна (3D-графіка) та фрактальна.

2. Чим відрізняються графіки різних видів?

Растрова графіка складається з окремих точок (пікселів) і втрачає якість при збільшенні зображення. Векторна графіка будується за допомогою математичних формул, що описують геометричні примітиви (лінії, фігури), тому вона масштабується без втрати якості. Тривимірна графіка відображає об’ємні об’єкти у тривимірному просторі за допомогою полігональних сіток та накладених текстур. Фрактальна графіка створюється за допомогою математичних формул самоподібних структур і не потребує зберігання великих масивів даних.

3. У яких випадках доцільно використовувати графіку саме такого виду?

Растрову графіку доцільно використовувати для обробки цифрових фотографій та художніх малюнків із великою кількістю дрібних деталей та плавними колірними переходами. Векторну графіку використовують для створення логотипів, креслень, схем, шрифтів та ілюстрацій, які мають часто масштабуватися. Тривимірну графіку застосовують в інженерному проєктуванні, архітектурній візуалізації, створенні спецефектів у кіно та розробці комп’ютерних ігор. Фрактальну графіку використовують для математичного моделювання складних природних об’єктів (хмар, дерев, рельєфу гір) та створення абстрактних текстур.

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

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

Прокрутка до верху