Яндекс практикум основы 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 шт):

Автор решения: Medvedev

Разбираем ошибки по шагам:

  1. name = DATABASE.value() - если вы хотели получить значение из словаря, а я подозреваю, что это так, то в python значение по ключу получается таким образом: city = DATABASE[name]. Переменная city у вас также была не задана, поэтому задаем значение переменной, а значение name не меняем.
  2. В функции 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('Антон, ты где?'))
→ Ссылка