В программе функция не выдает нужные значение, не может сделать расчет. Яндекс Практикум - строки и форматирование

Рейтинг: -1Ответов: 2Опубликовано: 16.04.2023
DATABASE = {
'Серёга': 'Омск',
'Соня': 'Москва',
'Миша': 'Москва',
'Дима': 'Челябинск',
'Алина': 'Красноярск',
'Егор': 'Пермь',
'Коля': 'Красноярск'
}

# Новая функция, она возвращает правильное словосочетание, склоняя слово "друзья" 
# в зависимости от того, какое число передано в аргументе friends_count
def format_friends_count(friends_count):
    if friends_count == 1:
        return '1 друг'
    elif 2 <= friends_count <= 4:
        return f'{friends_count} друга'
    else:
        return f'{friends_count} друзей'


def process_anfisa(query):
    if query == 'сколько у меня друзей?':
        count = len(DATABASE)
        def format_friends_count(count):
     
        # Вызовите функцию format_friends_count() и передайте в неё count.
        # Отредактируйте строку ниже: в ней должно использоваться выражение, 
        # которое вернёт функция format_friends_count()
            return f'У тебя {format_friends_count(count)}.'
    elif query == 'кто все мои друзья?':
        friends_string = ', '.join(DATABASE)
        return f'Твои друзья: {friends_string}'
    elif query == 'где все мои друзья?':
        unique_cities = set(DATABASE.values())
        cities_string = ', '.join(unique_cities)
        return f'Твои друзья в городах: {cities_string}'
    else:
        return '<неизвестный запрос>'


print('Привет, я Анфиса!')
print(process_anfisa('сколько у меня друзей?'))
print(process_anfisa('кто все мои друзья?'))
print(process_anfisa('где все мои друзья?'))


Привет, я Анфиса!
None
Твои друзья: Серёга, Соня, Миша, Дима, Алина, Егор, Коля
Твои друзья в городах: Москва, Красноярск, Омск, Пермь, Челябинск

Нужно вывести "у тебя 7 друзей"

Ответы

▲ 0

Попробуйте следующий вариант кода:

def format_friends_count(friends_count):
    match friends_count:
        case 1:
            return '1 друг'
        case 2|3|4:
            return f'{friends_count} друга'
        case _:
            return f'{friends_count} друзей'


def process_anfisa(query):
    if query == 'сколько у меня друзей?':
        return f'У тебя {format_friends_count(len(DATABASE))}.'
    elif query == 'кто все мои друзья?':
        friends_string = ', '.join(DATABASE)
        return f'Твои друзья: {friends_string}'
    elif query == 'где все мои друзья?':
        unique_cities = set(DATABASE.values())
        cities_string = ', '.join(unique_cities)
        return f'Твои друзья в городах: {cities_string}'
    else:
        return '<неизвестный запрос>'
▲ 0
    if query == 'сколько у меня друзей?':
        count = len(DATABASE)
        def format_friends_count(count): # <-- ?????
     
        # Вызовите функцию format_friends_count() и передайте в неё count.
        # Отредактируйте строку ниже: в ней должно использоваться выражение, 
        # которое вернёт функция format_friends_count()
            return f'У тебя {format_friends_count(count)}.'

В вашем коде создаётся ещё одна, локальная функция format_friends_count, в то время как в задании написано, что функцию надо просто вызвать. Уберите лишний заголовок функции (да и комментарии можно убрать после того как вы сделали, что в них требовалось). И не забыть убрать лишнюю табуляцию:

    if query == 'сколько у меня друзей?':
        count = len(DATABASE)
        return f'У тебя {format_friends_count(count)}.'