Python: Необязательные параметры функций
Функции могут принимать параметры. Иногда удобно задать значение сразу в определении функции, чтобы не указывать его при каждом вызове. Такое значение называется значением по умолчанию.
Если аргумент не передан, используется это значение. Если аргумент указан, то оно заменяет умолчание.
Пример: повторение текста
Сделаем функцию, которая повторяет строку несколько раз. По умолчанию пусть будет один раз, но при желании можно указать другое количество.
def repeat(text, times=1):
return text * times
print(repeat("Hi")) # => Hi
print(repeat("Hi", 3)) # => HiHiHi
В этом примере используется операция умножения строки на число. Она работает так: берётся исходная строка и повторяется указанное количество раз. Например, "A" * 5
превратится в "AAAAA"
. Это встроенная возможность Python, которая часто применяется при генерации шаблонов, разделителей и повторяющихся фрагментов текста.
Необязательные параметры всегда указываются в конце списка параметров. Поэтому в примере сначала идёт обязательный параметр text
, а уже после него — параметр times
со значением по умолчанию.
Пример: склейка слов с разделителем
По умолчанию слова соединяются пробелом, но можно указать другой символ.
def join_words(word1, word2, sep=" "):
return word1 + sep + word2
print(join_words("King", "Road")) # => King Road
print(join_words("Dragon", "stone", "-")) # => Dragon-stone
Пример: несколько параметров по умолчанию
Функция может содержать более одного параметра со значениями по умолчанию. Например, сделаем функцию, которая строит строку-разделитель. По умолчанию символ — это дефис, а длина — 10.
def make_line(symbol="-", length=10):
return symbol * length
print(make_line()) # => ----------
print(make_line("*")) # => **********
print(make_line("*", 5)) # => *****
print(make_line("#", 3)) # => ###
Задание
Реализуйте функцию get_hidden_card()
, который принимает на вход номер кредитки (состоящий из 16 цифр) в виде строки и возвращает его скрытую версию, которая может использоваться на сайте для отображения. Если исходная карта имела номер 2034399002125581, то скрытая версия выглядит так ****5581. Другими словами, функция заменяет первые 12 символов, на звездочки. Количество звездочек регулируется вторым, необязательным, параметром. Значение по умолчанию — 4.
# Кредитка передается внутрь как строка
# Второй параметр не передается, значит звездочек будет 4
get_hidden_card('1234567812345678') # ****5678
get_hidden_card('1234567812345678', 2) # **5678
get_hidden_card('1234567812345678', 3) # ***5678
# Или используя переменные
card_number = '2034399002121100'
get_hidden_card(card_number) # ****1100
get_hidden_card(card_number, 1) # *1100
Для выполнения задания вам понадобится механизм повторения строк, который повторяет строку указанное количество раз. Для этого достаточно умножить строку на число повторений:
'+' * 5 # +++++
'o' * 3 # ooo
Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект
Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник":
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в обратной связи нашего сообщества
Ваше упражнение проверяется по этим тестам
import index
def test():
assert index.get_hidden_card("1234123412341234") == "****1234"
assert index.get_hidden_card("1234123412344321") == "****4321"
assert index.get_hidden_card("1234123412344321", 3) == "***4321"
Решение учителя откроется через:
20:00
