Проблемы со строками в функции. (Подробнее в вопросе)
Наша функция будет возвращать строку с полным именем 'first_name middle_name last_name', если же middle_name отсутствует, то возвращаемая строка должна быть 'first_name last_name'.
И вот код:
def get_fullname (first_name, last_name, middle_name ):
return (f'{first_name} {last_name} {middle_name}')
В чем проблема?
Ответы (4 шт):
Если вы хотите сделать так, чтобы аргумент в функции можно было не передавать, то ему надо дать аргумент по умолчанию. Тогда ваш код будет выглядеть вот так:
def get_fullname(first_name, last_name, middle_name=' '):
return (f"{first_name}{middle_name if ' ' == middle_name else f' {middle_name} '}{last_name}")
def get_fullname_second(first_name, last_name, middle_name=''):
return ' '.join(filter(lambda ele: ele != '', (first_name, middle_name, last_name)))
print(get_fullname('Test', 'Test1', 'Test2'))
print(get_fullname('Test', 'Test1'))
Вывод
Test Test2 Test1
Test Test1
def get_fullname (first_name, last_name, middle_name='' ):
return (f'{first_name} {last_name} {middle_name}').strip()
Воспользуйтесь значением по умолчанию для переменной middle_name и strip для удаления лишнего пробела.
Переменную middle_name можно сделать аргументом по умолчанию, подставив в качестве запасного варианта пустую строку ''. Таким образом, даже не вводя middle_name, функция будет получать пустую строку в данную переменную.
Тогда ещё нужно изменить порядок вывода переменных в строке:
def get_fullname (first_name, last_name, middle_name=''):
return (f'{first_name} {middle_name} {last_name}')
def get_fullname(first_name, /, last_name=None, middle_name=None):
return ' '.join(filter(None, [first_name, middle_name, last_name]))
print(get_fullname('Vjacheslav', 'Fetisov', 'Aleksandrovich'))
print(get_fullname('Vjacheslav', 'Fetisov'))
# Vjacheslav Aleksandrovich Fetisov
# Vjacheslav Fetisov