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("!", "")