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"