Яндекс практикум основы Phyton тема 5 задача 5 шаг 3
#Помогите решить задачу
Шаг 3 Объявите функцию process_friend(name, query), принимающую имя друга name и запрос query. В этой функции будут обрабатываться запросы, в которых имя — не «Анфиса». В функции process_friend() напишите ветвление: если друг с именем name есть в словаре DATABASE: если переменная query содержит строку 'ты где?' — функция должна вернуть сообщение '{имя_друга} в городе {название_города}'; название города нужно получить из словаря DATABASE. если переменная query содержит какую-то другую строку — функция должна вернуть сообщение <неизвестный запрос>. если друга с именем name нет в словаре DATABASE — функция должна вернуть сообщение: У тебя нет друга по имени {имя_друга}. Теперь нужно дописать функцию process_query(). Добавьте в ветвление if name == 'Анфиса' блок else: если запрос начинается не с имени «Анфиса» — верните результат вызова функции process_friend(), передав в неё два аргумента: имя друга и текст вопроса. Добавьте новые вызовы функции
process_query():
print(process_query('Коля, что делать?'))
print(process_query('Антон, ты где?'))
, пишет :
Traceback (most recent call last): File "main.py", line 63, in <module> File "main.py", line 38, in process_query NameError: name 'name' is not defined**
#это мой код :
DATABASE = { 'Серёга': 'Омск', 'Соня': 'Москва', 'Миша': 'Москва', 'Дима': 'Челябинск', 'Алина': 'Красноярск', 'Егор': 'Пермь', 'Коля': 'Красноярск' } def process_friend(name, query): # Проверяем, есть ли имя name среди ключей словаря if name in DATABASE: name = DATABASE.value() return f'{name} в городе {city}' else: return f'У тебя нет друга по имени {name}'# Если имя есть в словаре - проверяем, что передано в query if query == 'ты где?': # Если в переменной query передан вопрос "ты где?" - # получаем из словаря значение (название города) по ключу name city = DATABASE[name] return f'{name} в городе {city}'# тут строка "имя_друга в городе название_города" 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_query(query): elements = query.split(', ') if elements[0] == 'Анфиса': return process_anfisa(elements[1]) else: return process_friend(element[0],query) def process_anfisa(query): if query == 'сколько у меня друзей?': count = len(DATABASE) # Вызовите функцию 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_query('Анфиса, сколько у меня друзей?')) print(process_query('Анфиса, кто все мои друзья?')) print(process_query('Анфиса, где все мои друзья?')) print(process_query('Анфиса, кто виноват?')) print(process_query('Соня, ты где?')) print(process_query('Коля, что делать?')) print(process_query('Антон, ты где?'))
Ссылка на код (если тут криво)
Ответы (1 шт):
Разбираем ошибки по шагам:
name = DATABASE.value()- если вы хотели получить значение из словаря, а я подозреваю, что это так, то в python значение по ключу получается таким образом:city = DATABASE[name]. Переменнаяcityу вас также была не задана, поэтому задаем значение переменной, а значениеnameне меняем.- В функции
process_friend(name, query):у васreturnпосле if и else, следовательно второе условие if уже не будет работать, так как результат функции возвращается при первом if else.
else:
return process_friend(elements[0],query) # забыли "s" после "element"
Исправленный код:
'Серёга': 'Омск',
'Соня': 'Москва',
'Миша': 'Москва',
'Дима': 'Челябинск',
'Алина': 'Красноярск',
'Егор': 'Пермь',
'Коля': 'Красноярск'
}
def process_friend(name, query):
# Проверяем, есть ли имя name среди ключей словаря
if name in DATABASE:
city = DATABASE[name]
print f'{name} в городе {city}'
else:
print f'У тебя нет друга по имени {name}'# Если имя есть в словаре - проверяем, что передано в query
if query == 'ты где?':
# Если в переменной query передан вопрос "ты где?" -
# получаем из словаря значение (название города) по ключу name
city = DATABASE[name]
return f'{name} в городе {city}'# тут строка "имя_друга в городе название_города"
else:
return
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_query(query):
elements = query.split(', ')
if elements[0] == 'Анфиса':
return process_anfisa(elements[1])
else:
return process_friend(elements[0],query)
def process_anfisa(query):
if query == 'сколько у меня друзей?':
count = len(DATABASE)
# Вызовите функцию 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_query('Анфиса, сколько у меня друзей?'))
print(process_query('Анфиса, кто все мои друзья?'))
print(process_query('Анфиса, где все мои друзья?'))
print(process_query('Анфиса, кто виноват?'))
print(process_query('Соня, ты где?'))
print(process_query('Коля, что делать?'))
print(process_query('Антон, ты где?'))
