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

Функції рівень 2

20 завдань

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

Як думати над функцією

#
На цьому рівні функції все ще невеликі, але логіка всередині вимагає поєднання кількох знайомих інструментів — циклів, рядкових методів, умов і повернення значень. Складність не в синтаксисі, а у виборі правильного підходу. Перш ніж писати тіло, поставте три запитання: який тип на вході, який тип має бути на виході, і яка операція їх пов'язує? Для підрахунку чогось у рядку — лічильник голосних, букв, слів — відповідь майже завжди одна: проходимо по рядку, перевіряємо кожен символ, підтримуємо лічильник, повертаємо його. ```python def count_vowels(text): vowels = "aeiouy" count = 0 for char in text.lower(): if char in vowels: count += 1 return count ``` text.lower() обробляє регістр перед перевіркою. "A" in "aeiouy" — False; перетворення заздалегідь вирішує цю проблему. Для рядкових перетворень — розвернути, видалити символи, обрізати краї — зріз і ланцюжок методів часто дають однорядкове рішення: ```python def reverse_text(text): return text[::-1] def remove_spaces(text): return text.replace(" ", "") def trim_edges(text): return text[1:-1] ``` text[::-1] — зріз із кроком -1, читає рядок від останнього символу до першого. text[1:-1] відрізає перший і останній символ. Для числових властивостей — остання цифра, абсолютна різниця, ділення без остачі — думайте, який арифметичний оператор дає потрібне безпосередньо: ```python def last_digit(n): return abs(n) % 10 def abs_diff(a, b): return abs(a - b) def divisible_by_3_and_5(n): return n % 3 == 0 and n % 5 == 0 ``` abs() обробляє від'ємні числа, тому остання цифра -47 — це 7, а не -7.

Патерни цього рівня

#
Перевірка на паліндром порівнює рядок із його ж зворотом: ```python def is_palindrome(text): return text == text[::-1] ``` Чутливість до регістру має значення. "Racecar" у зворотному порядку — "racecaR", що не рівне. Завдання тут перевіряють прості випадки, тому ця форма достатня. У продакшн-коді також потрібно видаляти пробіли і переводити до нижнього регістру. Підрахунок слів за допомогою split: ```python def count_words(text): return len(text.split()) ``` split() без аргументу розбиває по будь-яких пробілах і відкидає порожні частини. "hello world".split() дає ["hello", "world"] — два елементи, а не три. Фільтрація і сума з кортежу: ```python def sum_positive(numbers): total = 0 for n in numbers: if n > 0: total += n return total ``` Видалення певних символів — ітеруємо і відновлюємо: ```python def remove_exclamations(text): result = "" for char in text: if char != "!": result += char return result ``` Це той самий принцип, що й у завданні на фільтрацію пунктуації з теми while-loop, тепер загорнутий у функцію.

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

#
**Методи рядка що використовуються у функціях** | Метод | Повертає | Приклад | |---|---|---| | `s.lower()` | копія в нижньому регістрі | `'Hello'.lower()` → `'hello'` | | `s.upper()` | копія у верхньому регістрі | `'hi'.upper()` → `'HI'` | | `s.replace(old, new)` | копія із замінами | `'a b'.replace(' ', '')` → `'ab'` | | `s.split()` | список слів | `'a b c'.split()` → `['a','b','c']` | | `s.strip()` | копія без пробілів по краях | `' hi '.strip()` → `'hi'` | | `s.count(sub)` | кількість входжень | `'aabaa'.count('a')` → `4` | | `s.startswith(p)` | bool | `'Py'.startswith('P')` → `True` | | `s.endswith(p)` | bool | `'on'.endswith('n')` → `True` | **Патерни зрізів** ```python s[::-1] # перевернути весь рядок s[1:-1] # видалити перший та останній символ s[:n] # перші n символів s[-n:] # останні n символів s[i:j] # символи від індексу i до (не включаючи) j ``` **Числові помічники** ```python abs(-7) # 7 — завжди невід'ємне n % 10 # остання цифра n (abs спочатку якщо n може бути від'ємним) abs(n) % 10 # остання цифра, безпечно для від'ємних n % d == 0 # True коли n ділиться на d ``` **Патерни на цьому рівні** ```python # Порахувати символи що відповідають умові def count_vowels(text): return sum(1 for ch in text.lower() if ch in 'aeiou') # Перевірити властивість всього рядка def is_palindrome(text): return text == text[::-1] # Порахувати слова def count_words(text): return len(text.split()) # Видалити небажані символи def remove_spaces(text): return text.replace(' ', '') ```
01

Even або Odd.

#

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

def even_or_odd(n):
    pass
Рішення
def even_or_odd(n):
    if n % 2 == 0:
        return "Even"
    else:
        return "Odd"

# або так можна: спочатку отримати остачу
def even_or_odd(n):
    rest = n % 2
    if rest == 0:
        return "Even"
    return "Odd"
02

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

#

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

def reverse_text(text):
    pass
Рішення
def reverse_text(text):
    return text[::-1]

# або так можна через цикл
def reverse_text(text):
    result = ""
    for char in text:
        result = char + result
    return result
03

Середнє арифметичне.

#

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

def average(a, b):
    pass
Рішення
def average(a, b):
    return (a + b) / 2
04

Підрахунок голосних.

#

Напишіть функцію, яка приймає рядок та повертає кількість голосних букв у ньому. Голосні: a, e, i, o, u, y (регістр не важливий).

def count_vowels(text):
    pass
Рішення
def count_vowels(text):
    vowels = "aeiouy"
    count = 0
    for ch in text.lower():
        if ch in vowels:
            count += 1
    return count
05

Подільність на 3 і 5.

#

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

def divisible_by_3_and_5(n):
    pass
Рішення
def divisible_by_3_and_5(n):
    return n % 3 == 0 and n % 5 == 0
06

Рядок без пробілів.

#

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

def remove_spaces(text):
    pass
Рішення
def remove_spaces(text):
    result = ""
    for ch in text:
        if ch != " ":
            result += ch
    return result

# або так:
def remove_spaces(text):
    return text.replace(" ", "")
07

Сума додатних елементів.

#

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

def sum_positive(numbers):
    pass
Рішення
def sum_positive(numbers):
    total = 0
    for n in numbers:
        if n > 0:
            total += n
    return total
08

Перевірка паліндрома.

#

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

def is_palindrome(text):
    pass
Рішення
def is_palindrome(text):
    return text == text[::-1]

# або так можна: підготувати перевернутий рядок окремо
def is_palindrome(text):
    reversed_text = text[::-1]
    return text == reversed_text
09

Positive, Negative або Zero.

#

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

def describe_number(n):
    pass
Рішення
def describe_number(n):
    if n > 0:
        return "Positive"
    elif n < 0:
        return "Negative"
    else:
        return "Zero"
10

Кількість слів у рядку.

#

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

def count_words(text):
    pass
Рішення
def count_words(text):
    if text == "":
        return 0
    return len(text.split())
11

Кратність десяти.

#

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

def is_multiple_of_ten(n):
    pass
Рішення
def is_multiple_of_ten(n):
    return n % 10 == 0
12

Перший і останній символ функцією.

#

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

def first_and_last(text):
    pass
Рішення
def first_and_last(text):
    if text == "":
        return ""
    return text[0] + text[-1]
13

Yes, якщо більше 100.

#

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

def more_than_hundred(n):
    pass
Рішення
def more_than_hundred(n):
    if n > 100:
        return "Yes"
    return "No"

# Або так через тернарний оператор:
def more_than_hundred(n):
    return "Yes" if n > 100 else "No"
14

Підрахунок букви a.

#

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

def count_a(text):
    pass
Рішення
def count_a(text):
    count = 0
    for ch in text.lower():
        if ch == "a":
            count += 1
    return count
    
# або
def count_a(text):
    return text.lower().count("a")
15

Різниця за модулем.

#

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

def abs_diff(a, b):
    pass
Рішення
def abs_diff(a, b):
    diff = a - b
    if diff < 0:
        diff = -diff
    return diff

# або так можна через abs
def difference(a, b):
    return abs(a - b)
16

Парна довжина рядка.

#

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

def is_even_length(text):
    pass
Рішення
def is_even_length(text):
    return len(text) % 2 == 0
17

Остання цифра числа.

#

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

def last_digit(n):
    pass
Рішення
def last_digit(n):
    if n < 0:
        n = -n
    return n % 10

# або так можна через рядок
def last_digit(n):
    return int(str(abs(n))[-1])
18

Без першої та останньої літери.

#

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

def trim_edges(text):
    pass
Рішення
def trim_edges(text):
    if len(text) <= 2:
        return ""
    return text[1:-1]
19

Small, Medium або Large.

#

Напишіть функцію, яка приймає число та повертає рядок: - "Small" — якщо число менше 10 - "Medium" — якщо від 10 до 100 - "Large" — якщо більше 100

def size_label(n):
    pass
Рішення
def size_label(n):
    if n < 10:
        return "Small"
    elif n <= 100:
        return "Medium"
    else:
        return "Large"
20

Видалення знаків оклику.

#

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

def remove_exclamations(text):
    pass
Рішення
def remove_exclamations(text):
    result = ""
    for ch in text:
        if ch != "!":
            result += ch
    return result

# або так можна через replace
def remove_exclamation(text):
    return text.replace("!", "")