Python · Синтаксис · Начальный уровень
Функции: уровень 3
Упражнения по функциям Python уровня 3: функции с режимами работы, флагами, несколькими условиями, обработкой строк, списков и чисел для развития алгоритмического мышления.
Краткое введение в тему и пояснения перед упражнениями (упражнения ниже):
Паттерны режимов и флагов
#Справочник: режим, флаг, тернарное выражение и параметры по умолчанию
#Упражнения:
Режим 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
Флаг верхнего регистра.
#Напишите функцию, которая принимает строку и логическое значение. Если флаг upper равен True — вернуть строку в верхнем регистре, иначе — в нижнем.
def format_text(text, upper):
pass
Решение
def format_text(text, upper):
if upper:
return text.upper()
else:
return text.lower()
Операция 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
Переворот по условию.
#Напишите функцию, которая принимает строку и число. Если число больше 5 — вернуть строку в обратном порядке, иначе — вернуть строку без изменений.
def conditional_reverse(text, limit):
pass
Решение
def conditional_reverse(text, limit):
if limit > 5:
return text[::-1]
else:
return text
Абсолютное значение по флагу.
#Напишите функцию, которая принимает число и флаг. Если флаг 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
Режим 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]
Сумма или произведение.
#Напишите функцию, которая принимает кортеж чисел и режим: "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
Удаление пробелов по флагу.
#Напишите функцию, которая принимает строку и флаг. Если флаг True — удалить все пробелы, если False — вернуть строку без изменений.
def clean_spaces(text, remove):
pass
Решение
def clean_spaces(text, remove):
if not remove:
return text
return text.replace(" ", "")
Режим 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
Первые или последние 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:]
Большее или меньшее по флагу.
#Напишите функцию, которая принимает два числа и флаг. Если флаг 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
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
Квадрат или куб.
#Напишите функцию, которая принимает число и флаг. Если флаг 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
Обрезка 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]
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"