Сделаем так, чтобы можно было задавать вопросы не только Анфисе, но и самим друзьям, обращаясь к ним по имени. А друзья ответят, в каком они городе.
Добавим в запросы имена. Вопрос к Анфисе будет звучать так: Анфиса, где все мои друзья? Ответ на этот вопрос уже подготовлен, надо лишь немного изменить код.
А вопрос к кому-то из друзей будет таким: Коля, ты где?. Анфиса должна ответить: Коля в городе Красноярск.
Структура кода:
в первую очередь теперь будет вызываться функция process_query(query) (вы сейчас её напишете), она получает запрос и разделяет его на имя и вопрос (например, запрос Анфиса, где все мои друзья? должен быть разделён на Анфиса и где все мои друзья?);
если в запросе передано имя Анфиса — будет вызываться функция process_anfisa() с аргументом — вопросом (например — где все мои друзья?);
Объявите в коде функцию process_query(query), в ней с помощью метода split() разделите строку query на две части: на имя и вопрос.
После этого напишите проверку, ветвление if:
если имя — «Анфиса», вызовите функцию process_anfisa(), при вызове передайте в неё аргументом вопрос, получившийся при разделении строки query. Верните результат выполнения этой функции.
если же имя — не «Анфиса», то функция не должна делать вообще ничего: этот вариант обработаем в следующей задаче.
Отредактируйте список вызовов функции, размещённый в конце программы:
должна вызываться функция process_query(), вызовы должны выглядеть так:
print(process_query('Текст_запроса'))
все запросы должны начинаться с имени Анфиса:
Анфиса, сколько у меня друзей?
Анфиса, кто все мои друзья?
Анфиса, где все мои друзья?
Анфиса, кто виноват?
добавьте ещё один вызов, для проверки: print(process_query('Соня, ты где?')). На этот запрос Анфиса вернет None, но не сломается.
DATABASE = {
'Серёга': 'Омск',
'Соня': 'Москва',
'Миша': 'Москва',
'Дима': 'Челябинск',
'Алина': 'Красноярск',
'Егор': 'Пермь',
'Коля': 'Красноярск'
}
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)
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('где все мои друзья?'))
print(process_anfisa('кто виноват?'))
Ответы
DATABASE = {
'Серёга': 'Омск',
'Соня': 'Москва',
'Миша': 'Москва',
'Дима': 'Челябинск',
'Алина': 'Красноярск',
'Егор': 'Пермь',
'Коля': 'Красноярск'
}
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)
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 '<неизвестный запрос>'
def process_query(query):
name, question = query.split(', ', 1)
if name == 'Анфиса':
return process_anfisa(question)
else:
return None
print('Привет, я Анфиса!')
print(process_query('Анфиса, сколько у меня друзей?'))
print(process_query('Анфиса, кто все мои друзья?'))
print(process_query('Анфиса, где все мои друзья?'))
print(process_query('Анфиса, кто виноват?'))
print(process_query('Соня, ты где?'))
Теперь код будет обрабатывать запросы как для Анфисы, так и для других имён, и возвращать соответствующие ответы.