Значения по умолчанию

Тренажер по Python для пользователей с начальным уровнем подготовки.

Тренажер по Python

В этом модуле мы углубимся в работу с функциями в Python и изучим **параметры по умолчанию** (default parameters). Вы узнаете, как делать аргументы функции необязательными, в каком порядке их нужно объявлять и как избежать распространенных ловушек при использовании изменяемых типов данных в качестве значений по умолчанию.

Вам предстоит:
Написывать функции с необязательными аргументами.
Исправлять синтаксические ошибки, связанные с порядком аргументов.
Предсказывать поведение функций при различных способах вызова.
Разбираться с "подводными камнями" изменяемых значений (mutable defaults).

Задания расположены от простых синтаксических конструкций до более сложных логических задач. Удачи!

Список тем

Объявление значения по умолчанию

id: 40039_task_1_syntax

Допишите определение функции `greet`, чтобы аргумент `greeting` имел значение по умолчанию "Hello". Если при вызове приветствие не передано, должно использоваться стандартное.

Заполните пропуски
def greet(name, greetinginput1Sinput2S):
    print(f"{greeting}, {name}!")

# Тесты
greet("Alice")          # Вывод: Hello, Alice!
greet("Bob", "Hi")      # Вывод: Hi, Bob!
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Ошибка порядка аргументов

id: 40039_task_2_order_error

Интерпретатор Python выдает `SyntaxError` при попытке запуска этого кода. Найдите строку с ошибкой в определении функции и исправьте порядок аргументов.

Найдите ошибку и исправьте
# Функция расчета итоговой цены
def calculate_total(tax=0.05, price):
    return price * (1 + tax)
 
print(calculate_total(100))
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Результат вызова с аргументами

id: 40039_task_3_predict

Проанализируйте код функции `power`. Что выведет программа при вызове `power(3)`? Обратите внимание на значение аргумента `exp` по умолчанию.

Выберите правильный вариант ответа
def power(base, exp=2):
    return base ** exp

result = power(3)
print(result)
Сообщения
Проверить
Показать подсказку

Допустимые и недопустимые заголовки

id: 40039_task_4_valid_headers

Распределите заголовки функций на две категории: те, которые Python примет (Valid), и те, которые вызовут ошибку синтаксиса (Invalid).

Перетяните элементы в соответствующие блоки
Корректно (Valid)
Ошибка (SyntaxError)
def func(a, b=2, c=3):
def func(a=1, b, c=3):
def func(a=1, b=2, c=3):
def func(a, b, c=3):
def func(a=1, b=2, c):
Сообщения
Проверить
Показать подсказку

Создание функции connect

id: 40039_task_5_build

Соберите код функции, которая имитирует подключение к серверу. Порт по умолчанию должен быть 80. Строка вызова функции должна использовать стандартный порт.

Перетяните в правильном порядке строки из одного блока в другой
print(f"Connecting to {host}:{port}")
connect("google.com")
def connect(host, port=80):
connect("google.com", port=8080)
def connect(port=80, host):
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Сопоставьте вызов функции и результат

id: 40039_task_7_compare

Дана функция:
`def shop(item, qty=1, shop="Mall"):`
`return f"{qty} {item} from {shop}"`

Сопоставьте код вызова с возвращаемой строкой.

Сопоставьте строки в правой части с соответствующими строками в левой по порядковому номеру
1 Apple from Mall
5 Banana from Mall
2 Pizza from Mario
shop("Banana", 5)
shop("Pizza", shop="Mario", qty=2)
shop("Apple")
Сообщения
Проверить
Показать подсказку

Ловушка с изменяемым списком

id: 40039_task_8_mutable_trap

Это классический вопрос на собеседованиях. Что выведет последний `print`?
Значение по умолчанию для списка создается **один раз** при определении функции, а не при каждом вызове.

Выберите правильный вариант ответа
def add_item(item, cart=[]):
    cart.append(item)
    return cart

print(add_item("Apple"))  # Выведет ['Apple']
print(add_item("Banana")) # Что выведет здесь?
Сообщения
Проверить
Показать подсказку

Правильная реализация списка по умолчанию

id: 40039_task_9_fix_mutable

Чтобы избежать проблемы из предыдущего задания, принято использовать `None` в качестве значения по умолчанию. Заполните пропуски, чтобы функция создавала новый список, если аргумент не передан.

Заполните пропуски
def add_item(item, cart=input1S):
    if cart is input2S:
        cart = []
    cart.append(item)
    return cart
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Вычисление с разными типами аргументов

id: 40039_task_10_calc

Функция `calculate` принимает три аргумента. Вычислите, что вернет вызов функции внизу. Введите только число.

Что должно получиться?
def calculate(a, b=10, c=1):
    return (a + b) * c

result = calculate(5, c=2)
print(result)
Сообщения
Проверить
Показать подсказку
НайтиКурс.Ру