Python · Синтаксис · Початковий рівень

Функції

10 завдань

Базові вправи з функцій Python: створення функцій, параметри, return, перевірки чисел і строк, робота зі списками, кортежами і простими обчисленнями.

Що таке функції і навіщо вони потрібні

#
Функція — це іменований блок коду, який можна викликати за іменем звідусіль і скільки завгодно разів. Суть не в тому, щоб менше друкувати, — а в тому, щоб дати поведінці ім'я і зробити код тестованим і придатним для повторного використання. Без функцій, якщо потрібно перевірити, чи число парне, в трьох різних місцях, доведеться тричі копіювати ту саму перевірку if n % 2 == 0. Коли логіка змінюється — виправляєте в трьох місцях і сподіваєтеся, що не пропустили жодне. З функцією виправляєте один раз. Функція також створює чіткий контракт: ось що входить (параметри), ось що виходить (повернуте значення). Цей контракт можна перевірити окремо, не запускаючи всю програму. У цих завданнях кожне завдання має однаковий формат: напишіть функцію, яка робить одну конкретну річ. Це змушує думати про вхід і вихід окремо від решти коду — що і є ключовою навичкою.

def, параметри і return

#
Оголошення функції в Python: ```python def square(n): return n * n result = square(5) print(result) # 25 ``` def оголошує визначення функції. square — ім'я. n у дужках — параметр, локальна змінна, що отримує значення, передане при виклику. return повертає значення викликачу і завершує функцію. Функція без оператора return (або з голим return) повертає None. Зазвичай це не те, чого чекаєш у завданнях — завжди перевіряйте, що ви справді повертаєте значення. pass — це заглушка, яка дозволяє написати сигнатуру функції до реалізації тіла. Ви побачите її в початковому коді кожного завдання: ```python def square(n): pass # видаліть це і напишіть реальну логіку ``` Параметри є локальними: вони існують лише всередині функції. Зміна параметра не впливає на змінні зовні. Якщо потрібно передати результат назад — повертайте його через return, а не виводьте print всередині функції (хіба що завдання функції і є виведення, що буває рідко). Кілька параметрів працюють так само: ```python def max_of_two(a, b): if a >= b: return a return b ``` Щойно досягається return, функція зупиняється. else після return не потрібний.

Три патерни функцій

#
Більшість завдань у цій темі відповідають одному з трьох патернів. Обчислити і повернути — застосовуємо операцію і повертаємо результат: ```python def power(base, exp): return base ** exp print(power(2, 10)) # 1024 ``` Перевірити і повернути булеве значення — перевіряємо умову, повертаємо True або False: ```python def is_even(n): return n % 2 == 0 print(is_even(8)) # True print(is_even(7)) # False ``` Зверніть увагу: return n % 2 == 0 — це один вираз. n % 2 == 0 вже обчислюється до True або False, тому повертаємо це безпосередньо — без if. Ітерувати і зібрати — проходимо по послідовності всередині функції, накопичуємо результат, повертаємо його: ```python def multiply(sequence): result = 1 for n in sequence: result *= n return result print(multiply((3, 4, 100, 15))) # 18000 ``` Рядкові операції часто комбінують вбудований метод із return: ```python def to_upper(text): return text.upper() ``` Коротко, але корисно — функції не мають бути довгими, щоб мати сенс.

Швидкий довідник: функції

#
**Синтаксис функції** ```python def назва_функції(параметр1, параметр2): # тіло return значення # виклик: результат = назва_функції(аргумент1, аргумент2) ``` **Ключові правила** | Правило | Деталь | |---|---| | `return` повертає значення | без нього функція повертає `None` | | `return` завершує функцію | код після нього в тій самій гілці не виконується | | Параметри локальні | їх зміна не впливає на змінні ззовні | | `pass` — це заглушка | видаліть її перед написанням реальної логіки | **Три основні патерни** ```python # 1. Обчислити та повернути def power(base, exp): return base ** exp # 2. Перевірити та повернути булеве значення def is_even(n): return n % 2 == 0 # вираз вже дає True/False # 3. Перебрати та побудувати def multiply_all(nums): result = 1 for n in nums: result *= n return result ``` **Типові помилки** ```python # Забути return — функція повертає None: def square(n): n * n # обчислено але не повернено! # Друкувати замість повертати: def square(n): print(n * n) # викликач отримає None, а не значення # Зайвий if/else для булевих: def is_even(n): # погано if n % 2 == 0: return True else: return False def is_even(n): # добре return n % 2 == 0 ```
01

Квадрат числа функцією.

#

Напишіть функцію, яка приймає одне число та повертає його квадрат.

def square(n):
    pass


result = square(5)
print(result)
result = square(2)
print(result)
result = square(25)
print(result)
Рішення
def square(n):
    return n * n


result = square(5)
print(result)
result = square(2)
print(result)
result = square(25)
print(result)


# або
def square(n):
    result = n * n
    return result

# або
def square(n):
    result = n ** 2
    return result

# або
def square(n):
    return n ** 2
02

Більше число функцією.

#

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

def max_of_two(a, b):
    pass


print(max_of_two(10, 7))
Рішення
def max_of_two(a, b):
    if a > b:
        return a
    else:
        return b


print(max_of_two(10, 7))


# АБО уважно можна і так, else фактично не потрібен,
# тому що return завершує роботу функції якщо він спрацював в умові або взагалі:
def max_of_two(a, b):
    if a > b:
        return a
    return b


print(max_of_two(10, 7))

# або так можна: спочатку перевірити рівність
def bigger(a, b):
    if a == b:
        return a
    if a > b:
        return a
    return b
03

Довжина рядка без len.

#

Напишіть функцію, яка приймає рядок та повертає його довжину (нібито функції len немає).

def string_length(text):
    pass


print(string_length("python"))
Рішення
def string_length(text):
    count = 0
    for _ in text:
        count += 1
    return count


print(string_length("python"))

# або можна назвати лічильник більш явно
def get_length(text):
    count = 0
    for char in text:
        count += 1
    return count
04

Парність через функцію.

#

Напишіть функцію, яка приймає число та повертає True , якщо число парне, інакше False .

def is_even(n):
    pass


print(is_even(8))
Рішення
def is_even(n):
    if n % 2 == 0:
        return True
    else:
        return False

print(is_even(8))


# АБО
def is_even(n):
    if n % 2 == 0:
        return True
    return False


# АБО
def is_even(n):
    return n % 2 == 0  # одразу повернемо результат порівняння.

# або так можна через змінну
def is_even(n):
    result = n % 2 == 0
    return result
05

Сума двох чисел функцією.

#

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

def add(a, b):
    pass


print(add(3, 4))
Рішення
def add(a, b):
    return a + b


print(add(3, 4))
06

Рядок у верхньому регістрі.

#

Напишіть функцію, яка приймає рядок та повертає новий рядок, символи у верхньому регістрі.

def to_upper(text):
    pass


print(to_upper("hello"))
Рішення
def to_upper(text):
    return text.upper()


print(to_upper("hello"))

# або так можна: результат спочатку зберегти
def to_upper(text):
    result = text.upper()
    return result
07

Додатне число функцією.

#

Напишіть функцію, яка приймає число та повертає True , якщо воно додатне, інакше False .

def is_positive(n):
    pass


print(is_positive(-3))
Рішення
def is_positive(n):
    if n > 0:
        return True
    else:
        return False

print(is_positive(-3))


# АБО
def is_positive(n):
    if n > 0:
        return True
    return False


# АБО
def is_positive(n):
    return n > 0
08

Піднесення до степеня.

#

Напишіть функцію, яка приймає два числа: основу та показник степеня — і повертає результат піднесення основи до степеня.

def power(base, exp):
    pass


print(power(2, 3))
Рішення
def power(base, exp):
    result = 1
    for _ in range(exp):
        result *= base
    return result

print(power(2, 3))


# АБО
def power(base, exp):
    return base ** exp
09

Добуток чисел кортежу.

#

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

def multiply(sequence):
    pass


print(multiply((3, 4, 100, 15)))
Рішення
def multiply(sequence):
    result = 1
    for n in sequence:
        result *= n
    return result


print(multiply((3, 4, 100, 15)))


# АБО краще
def multiply(sequence):
    if len(sequence) == 0:  # <--- прям добре
        return 0

    result = 1
    for n in sequence:
        result *= n
    return result
10

Повторення рядка функцією.

#

Напишіть функцію, яка приймає рядок і число, та повертає цей рядок, повторений вказану кількість разів.

def repeat_text(text, count):
    pass


print(repeat_text(")", 3))
Рішення
def repeat_text(text, count):  
    result = ""
    for _ in range(count):  # не круто, нижче є круто.
        result += text
    return result


print(repeat_text(")", 3))


# АБО
def repeat_text(text, count):
    return text * count