Задача 1
Это код Анфисы, который вы последовательно писали на протяжении нескольких тем.
Можете запустить его, вспомнить как выполняются запросы из списка queries
.
А. Отредактируйте список запросов queries
.
Все запросы должны начинаться с обращения Анфиса
:
- Анфиса, сколько у меня друзей?
- Анфиса, кто все мои друзья?
- Анфиса, где все мои друзья?
- Анфиса, кто виноват?
Б. Напишите функцию process_query(query)
.
Значение параметра query
должно быть обработано методом split()
.
Отделите имя в начале от тела запроса (т.е., от оставшейся части).
- Если запрос начинается с имени «Анфиса», то вызовите функцию
process_anfisa()
, передав в неё тело запроса как параметр. И верните результат выполнения этой функции. - Если запрос начинается с другого имени, то пока ничего не делайте — это отложим до следующей задачи.
В. Измените в функции runner()
вызов process_anfisa()
на вызов process_query()
.
Код:
DATABASE = {
'Сергей': 'Омск',
'Соня': 'Москва',
'Миша': 'Москва',
'Дима': 'Челябинск',
'Алина': 'Красноярск',
'Егор': 'Пермь',
'Коля': 'Красноярск'
}
def format_count_friends(count_friends):
if count_friends == 1:
return '1 друг'
elif 2 <= count_friends <= 4:
return f'{count_friends} друга'
else:
return f'{count_friends} друзей'
def process_anfisa(query):
if query == 'сколько у меня друзей?':
count_string = format_count_friends(len(DATABASE))
return f'У тебя {count_string}'
elif query == 'кто все мои друзья?':
friends_string = ', '.join(DATABASE.keys())
return f'Твои друзья: {friends_string}'
elif query == 'где все мои друзья?':
unique_cities = set(DATABASE.values())
cities_string = ', '.join(unique_cities)
return f'Твои друзья в городах: {cities_string}'
else:
return '<неизвестный запрос>'
def runner():
queries = [
'Анфиса, сколько у меня друзей?',
'Анфиса, кто все мои друзья?',
'Анфиса, где все мои друзья?',
'Анфиса, кто виноват?'
]
for query in queries:
print(query, '-', process_query(query))
def process_query(query):
tokens = query.split(', ')
name = tokens[0]
if name == 'Анфиса': return process_anfisa(tokens[1])
runner()
Результат:
Анфиса, сколько у меня друзей? - У тебя 7 друзей Анфиса, кто все мои друзья? - Твои друзья: Сергей, Соня, Миша, Дима, Алина, Егор, Коля Анфиса, где все мои друзья? - Твои друзья в городах: Челябинск, Красноярск, Омск, Пермь, Москва Анфиса, кто виноват? - <неизвестный запрос>
Задача 2
А. Напишите функцию process_friend(name, query)
(англ. friend, «друг»), принимающую имя друга name и запрос query.
- Если друга с указанным именем ‘Н’ нет в списке, то функция должна вернуть сообщение об ошибке
У тебя нет друга по имени Н
. - Если запрос — «ты где?», то функция должна вернуть сообщения
'Н в городе Г'
, где Г определяется по данным словаряDATABASE
. - Если запрос не «ты где?», а какой-то другой, то функция должна вернуть сообщение об ошибке
<неизвестный запрос>
.
Б. Допишите функцию process_query()
.
Если запрос начинается не с «Анфиса», а с другого имени, то вызовите функцию process_friend(name, query)
, передав в неё имя друга и тело запроса.
И верните результат выполнения этой функции.
В. Добавьте в список queries
новые запросы вида:
- Коля, ты где?
- Соня, что делать?
- Антон, ты где?
Код:
DATABASE = {
'Сергей': 'Омск',
'Соня': 'Москва',
'Миша': 'Москва',
'Дима': 'Челябинск',
'Алина': 'Красноярск',
'Егор': 'Пермь',
'Коля': 'Красноярск'
}
def format_count_friends(count_friends):
if count_friends == 1:
return '1 друг'
elif 2 <= count_friends <= 4:
return f'{count_friends} друга'
else:
return f'{count_friends} друзей'
def process_anfisa(query):
if query == 'сколько у меня друзей?':
count_string = format_count_friends(len(DATABASE))
return f'У тебя {count_string}'
elif query == 'кто все мои друзья?':
friends_string = ', '.join(DATABASE.keys())
return f'Твои друзья: {friends_string}'
elif query == 'где все мои друзья?':
unique_cities = set(DATABASE.values())
cities_string = ', '.join(unique_cities)
return f'Твои друзья в городах: {cities_string}'
else:
return '<неизвестный запрос>'
def runner():
queries = [
'Анфиса, сколько у меня друзей?',
'Анфиса, кто все мои друзья?',
'Анфиса, где все мои друзья?',
'Анфиса, кто виноват?',
'Коля, ты где?',
'Соня, что делать?',
'Антон, ты где?'
]
for query in queries:
print(query, '-', process_query(query))
def process_query(query):
tokens = query.split(', ')
name = tokens[0]
if name == 'Анфиса': return process_anfisa(tokens[1])
else: return process_friend(name, tokens[1])
def process_friend(name, query):
if name in DATABASE:
if query == 'ты где?':
city = DATABASE[name]
print(f'{name} в городе {city}')
return f'{name} в городе {city}'
else: return '<неизвестный запрос>'
else: return f'У тебя нет друга по имени {name}'
runner()
Результат:
Анфиса, сколько у меня друзей? - У тебя 7 друзей Анфиса, кто все мои друзья? - Твои друзья: Сергей, Соня, Миша, Дима, Алина, Егор, Коля Анфиса, где все мои друзья? - Твои друзья в городах: Пермь, Челябинск, Красноярск, Омск, Москва Анфиса, кто виноват? - <неизвестный запрос> Коля в городе Красноярск Коля, ты где? - Коля в городе Красноярск Соня, что делать? - <неизвестный запрос> Антон, ты где? - У тебя нет друга по имени Антон
Оставьте комментарий
You must be logged in to post a comment.