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

Функції: рівень 3

15 завдань

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

Параметри, що керують поведінкою

#
Ці завдання знайомлять із патерном, який постійно зустрічається в реальному коді: параметр, що керує тим, що функція робить, а не тим, над чим вона працює. Найпоширеніші форми — рядок-режим і булевий прапор. Рядок-режим — зазвичай одне з невеликого набору літеральних значень, як-от "add", "sub", "sum", "product". Функція розгалужується за ним через if/elif: ```python def calculate(a, b, operation): if operation == "add": return a + b elif operation == "sub": return a - b ``` Булевий прапор перемикає між двома варіантами поведінки. Ім'я параметра зазвичай ясно вказує на намір: ```python def format_text(text, upper): if upper: return text.upper() else: return text.lower() ``` Ключовий момент: дані (текст, числа) і поведінка (що з ними робити) — обидва є входами функції. Це робить функцію гнучкою без необхідності писати окрему функцію для кожної комбінації. Поширена помилка — трактувати прапор як рядок: if upper == True більш крихке, ніж if upper, а if upper == "True" просто неправильне. Булеві параметри вже є True або False — використовуйте їх безпосередньо.

Патерни режимів і прапорів

#
Більшість завдань тут поєднують режим або прапор із коротким обчисленням. Блок if/elif — це вся функція: ```python def scale_number(n, mode): if mode == "double": return n * 2 elif mode == "triple": return n * 3 def combine_numbers(numbers, mode): if mode == "sum": total = 0 for n in numbers: total += n return total elif mode == "product": result = 1 for n in numbers: result *= n return result ``` Для операцій над кортежем або списком режим вибирає, яке обчислення запускати — але обидві гілки використовують одну структуру ітерації. Булеві прапори з двома симетричними варіантами поведінки: ```python def pick_number(a, b, get_max): if get_max: return a if a >= b else b else: return a if a <= b else b ``` a if умова else b — вбудований умовний вираз Python (тернарний). Він еквівалентний блоку if/else, але вміщується в одному виразі. Використовуйте його, коли обидві гілки короткі. Комбінування двох параметрів незалежно: ```python def maybe_abs(n, use_abs): if use_abs: return abs(n) return n ``` Коли одна гілка просто повертає незмінений вхід, else не потрібен — голий return в кінці обробляє цей випадок.

Довідник: режим, прапор, тернарний вираз та параметри за замовчуванням

#
**Патерн рядка режиму** ```python def calculate(a, b, operation): if operation == 'add': return a + b elif operation == 'sub': return a - b elif operation == 'mul': return a * b return None ``` **Патерн булевого прапора** ```python def format_text(text, upper): # прапор контролює поведінку if upper: return text.upper() return text.lower() # НЕ робіть так: if upper == True: # надлишково if upper == 'True': # неправильно — порівнює з рядком ``` **Тернарний вираз** ```python # значення_якщо_істина if умова else значення_якщо_хибність result = a if a > b else b # максимум з двох label = 'парне' if n % 2 == 0 else 'непарне' # еквівалентно: if a > b: result = a else: result = b ``` **Значення параметрів за замовчуванням** ```python def greet(name, greeting='Hello'): return f'{greeting}, {name}!' greet('Alice') # 'Hello, Alice!' greet('Alice', 'Hi') # 'Hi, Alice!' # Правила: # - значення за замовчуванням — в кінці списку параметрів # - викликач може перевизначити передавши значення # - використовуйте лише незмінні значення (str, int, None — не списки) ``` **Поєднання режиму та прапора** ```python def process(numbers, mode, absolute=False): if mode == 'sum': result = sum(numbers) elif mode == 'max': result = max(numbers) return abs(result) if absolute else result ```
01

Режим double або triple.

#

Напишіть функцію, яка приймає число та рядок-режим: "double" або "triple". Якщо режим "double" — повернути число, помножене на 2, якщо "triple" — помножене на 3.

def scale_number(n, mode):
    pass
Рішення
def scale_number(n, mode):
    if mode == "double":
        return n * 2
    elif mode == "triple":
        return n * 3
02

Прапорець верхнього регістру.

#

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

def format_text(text, upper):
    pass
Рішення
def format_text(text, upper):
    if upper:
        return text.upper()
    else:
        return text.lower()
03

Операція add або sub.

#

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

def calculate(a, b, operation):
    pass
Рішення
def calculate(a, b, operation):
    if operation == "add":
        return a + b
    elif operation == "sub":
        return a - b
04

Перевертання за умовою.

#

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

def conditional_reverse(text, limit):
    pass
Рішення
def conditional_reverse(text, limit):
    if limit > 5:
        return text[::-1]
    else:
        return text
05

Абсолютне значення за прапорцем.

#

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

def maybe_abs(n, use_abs):
    pass
Рішення
def maybe_abs(n, use_abs):
    if use_abs and n < 0:
        return -n
    return n

# Або так краще:
def maybe_abs(n, use_abs):
    if use_abs:
        return abs(n)
    return n
06

Режим first або last.

#

Напишіть функцію, яка приймає рядок і режим: "first" або "last". Поверніть або перший символ рядка, або останній.

def pick_char(text, mode):
    pass
Рішення
def pick_char(text, mode):
    if text == "":
        return ""
    if mode == "first":
        return text[0]
    elif mode == "last":
        return text[-1]
07

Сума або добуток.

#

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

def combine_numbers(numbers, mode):
    pass
Рішення
def combine_numbers(numbers, mode):
    if mode == "sum":
        return sum(numbers)
    elif mode == "product":
        result = 1
        for n in numbers:
            result *= n
        return result
08

Видалення пробілів за прапорцем.

#

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

def clean_spaces(text, remove):
    pass
Рішення
def clean_spaces(text, remove):
    if not remove:
        return text
    return text.replace(" ", "")
09

Режим even або odd.

#

Напишіть функцію, яка приймає число і режим: "even" або "odd". Поверніть True, якщо число відповідає режиму.

def check_parity(n, mode):
    pass
Рішення
def check_parity(n, mode):
    if mode == "even":
        return n % 2 == 0
    elif mode == "odd":
        return n % 2 != 0
10

Перші або останні 3 символи.

#

Напишіть функцію, яка приймає рядок і режим: "short" або "long". Якщо режим "short" — повернути перші 3 символи, якщо "long" — останні 3 символи.

def slice_text(text, mode):
    pass
Рішення
def slice_text(text, mode):
    if len(text) < 3:
        return text
    if mode == "short":
        return text[:3]
    elif mode == "long":
        return text[-3:]
11

Більше або менше за прапорцем.

#

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

def pick_number(a, b, get_max):
    pass
Рішення
def pick_number(a, b, get_max):
    if get_max:
        return a if a > b else b
    else:
        return a if a < b else b
12

Count або length.

#

Напишіть функцію, яка приймає рядок і режим: "count" або "length". Якщо режим "count" — повернути кількість букв "a", якщо "length" — довжину рядка.

def analyze_text(text, mode):
    pass
Рішення
def analyze_text(text, mode):
    if mode == "length":
        return len(text)
    elif mode == "count":
        cnt = 0
        for ch in text.lower():
            if ch == "a":
                cnt += 1
        return cnt
13

Квадрат або куб.

#

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

def power_by_flag(n, square):
    pass
Рішення
def power_by_flag(n, square):
    if square:
        return n * n
    else:
        return n * n * n
14

Обрізка start або end.

#

Напишіть функцію, яка приймає рядок і режим: "start" або "end". Якщо "start" — повернути рядок без перших 2 символів, якщо "end" — без останніх 2.

def trim_text(text, mode):
    pass
Рішення
def trim_text(text, mode):
    if len(text) <= 2:
        return ""
    if mode == "start":
        return text[2:]
    elif mode == "end":
        return text[:-2]
15

Sign або abs.

#

Напишіть функцію, яка приймає число і режим: "sign" або "abs". Якщо режим "sign" — повернути рядок "positive", "negative" або "zero", якщо "abs" — повернути абсолютне значення числа.

def number_info(n, mode):
    pass
Рішення
def number_info(n, mode):
    if mode == "abs":
        return -n if n < 0 else n
    elif mode == "sign":
        if n > 0:
            return "positive"
        elif n < 0:
            return "negative"
        else:
            return "zero"