Решаю задачу и кажется что код правильный но он не работает

Grizlyman

Новичок
Пользователь
Окт 12, 2020
3
1
3
Здравствуйте все! Прохожу бесплатный курс на Яндекс Практикуме по Питону и застрял на одной задаче. Прошу не пугаться, что ниже такой длинный код, на самом деле тут всё просто, изменения нужны небольшие, только я уже 2 часа не могу понять, почему код не работает )). Просмотрел уже не один раз, ну ведь должен он работать )).

В общем суть в том, что программа должна выдать такой результат:

Анфиса, сколько у меня друзей? - У тебя 7 друзей
Анфиса, кто все мои друзья? - Твои друзья: Сергей, Соня, Миша, Дима, Алина, Егор, Коля
Анфиса, где все мои друзья? - Твои друзья в городах: Омск, Москва, Красноярск, Пермь, Челябинск
Анфиса, кто виноват? - <неизвестный запрос>
Коля, ты где? - Коля в городе Красноярск
Соня, что делать? - <неизвестный запрос>
Антон, ты где? - У тебя нет друга по имени Антон

Уберу в спойлер формулировку задания:
2.
А. Напишите функцию process_friend(name, query), принимающую имя друга name и запрос query.
  • Если друга с указанным именем 'Н' нет в списке, то функция должна вернуть сообщение об ошибке У тебя нет друга по имени Н.
  • Если запрос — «ты где?», то функция должна вернуть сообщения 'Н в городе Г', где Г определяется по данным словаря DATABASE.
  • Если запрос не «ты где?», а какой-то другой, то функция должна вернуть сообщение об ошибке <неизвестный запрос>.
Б. Допишите функцию process_query(). Если запрос начинается не с «Анфиса», а с другого имени, то вызовите функцию process_friend(name, query), передав в неё имя друга и тело запроса. И верните результат выполнения этой функции.
В. Добавьте в список queries новые запросы вида:
  • Коля, ты где?
  • Соня, что делать?
  • Антон, ты где?

Что-то неправильно написано в функции process_friend или в функции process_query. У меня получается такой результат (последние строки почему-то выводятся все в одну строку):

Анфиса, сколько у меня друзей? - У тебя 7 друзей
Анфиса, кто все мои друзья? - Твои друзья: Сергей, Соня, Миша, Дима, Алина, Егор, Коля
Анфиса, где все мои друзья? - Твои друзья в городах: Омск, Москва, Красноярск, Пермь, Челябинск
Анфиса, кто виноват?Коля, ты где?Соня, что делать?Антон, ты где? - <неизвестный запрос>

А вот код:

Python:
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 == 'сколько у меня друзей?' or 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 process_query(query):
    tokens = query.split(', ')
    name = tokens[0]
    if name == 'Анфиса':
        query = query.strip('Анфиса, ')
        return process_anfisa(query)
    else:
        query = query.strip('Коля, ')
        return process_friend(name, query)
        
def process_friend(name, query):
    if name in DATABASE:
        if query == 'ты где?':
            city = DATABASE[name]
            return f'{name} в городе {city}'
        else:
            return '<неизвестный запрос>'
    else:
        return f'У тебя нет друга по имени {name}'
    
        
def runner():
    queries = [
        'Анфиса, сколько у меня друзей?',
        'Анфиса, кто все мои друзья?',
        'Анфиса, где все мои друзья?',
        'Анфиса, кто виноват?'
        'Коля, ты где?'
        'Соня, что делать?'
        'Антон, ты где?'
    ]
    
    for query in queries:
        print(query + ' - ' + process_query(query))


runner()
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 642
472
83
Вы забыли запятые в списке queries
нужно вот так
Python:
def runner():
    queries = [
        'Анфиса, сколько у меня друзей?',
        'Анфиса, кто все мои друзья?',
        'Анфиса, где все мои друзья?',
        'Анфиса, кто виноват?',
        'Коля, ты где?',
        'Соня, что делать?',
        'Антон, ты где?'
    ]
 
  • Мне нравится
Реакции: MonaCCi и Student

Grizlyman

Новичок
Пользователь
Окт 12, 2020
3
1
3
Вы забыли запятые в списке queries
нужно вот так
Python:
def runner():
    queries = [
        'Анфиса, сколько у меня друзей?',
        'Анфиса, кто все мои друзья?',
        'Анфиса, где все мои друзья?',
        'Анфиса, кто виноват?',
        'Коля, ты где?',
        'Соня, что делать?',
        'Антон, ты где?'
    ]

Спасибо больше, и правда, дело оказалось в этом ))). Как же внимательно нужно всё смотреть... Я, кстати, ещё один момент исправил в коде, ну это уже так, не к конкретному вопросу темы относится:

Python:
if name == 'Анфиса':
       return process_anfisa(tokens[1])
 
  • Мне нравится
Реакции: Student

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 642
472
83
Спасибо больше, и правда, дело оказалось в этом ))). Как же внимательно нужно всё смотреть... Я, кстати, ещё один момент исправил в коде, ну это уже так, не к конкретному вопросу темы относится:

Python:
if name == 'Анфиса':
       return process_anfisa(tokens[1])
Нужно не внимательно смотреть, а пытаться понять, почему программа работает не так, как вы ожидали, в вашем случае из за пропуска запятых последний элемент в списке был 'Анфиса, кто виноват?Коля, ты где?Соня, что делать?Антон, ты где?', таким образом он отвечал на это <неизвестный запрос>, и ваши предположения что ошибки в каких то функциях были ошибочны
 
Последнее редактирование:
  • Мне нравится
Реакции: Student

Grizlyman

Новичок
Пользователь
Окт 12, 2020
3
1
3
Нужно не внимательно смотреть, а пытаться понять, почему программа работает не так, как вы ожидали, в вашем случае из за пропуска запятых последний элемент в списке был 'Анфиса, кто виноват?Коля, ты где?Соня, что делать?Антон, ты где?', таким образом он отвечал на это <неизвестный запрос>, и ваши предположения что ошибки в каких то функциях были ошибочны
Да, согласен, нужно учесть это на будущее.

А мне ещё вот что интересно. Я прохожу курс с целью попробовать, узнать что такое программирование. Прошёл бесплатную часть курса веб-разработчик, по html и css сложностей для себя не увидел, по java script вроде тоже не показалось сложным, хотя по нему там было немного. А вот на Питоне я честно говоря малость просел. В том смысле, что например вот эту задачу, а также её предыдущую половину, решил с трудом, и то с подсказками и отчасти не понимая как решил. Как будто способностей не хватает, чтобы осилить подобные задачи. А может быть каких-то личных свойств, например усидчивости или терпения. И стало интересно, у большинства такая же ситуация во время обучения, или нет. Моё это или может быть не стоит себя мучить. Интересно, нет ли вообще какого-нибудь универсального способа проверить себя на пригодность к этой профессии.
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 642
472
83
Да, согласен, нужно учесть это на будущее.

А мне ещё вот что интересно. Я прохожу курс с целью попробовать, узнать что такое программирование. Прошёл бесплатную часть курса веб-разработчик, по html и css сложностей для себя не увидел, по java script вроде тоже не показалось сложным, хотя по нему там было немного. А вот на Питоне я честно говоря малость просел. В том смысле, что например вот эту задачу, а также её предыдущую половину, решил с трудом, и то с подсказками и отчасти не понимая как решил. Как будто способностей не хватает, чтобы осилить подобные задачи. А может быть каких-то личных свойств, например усидчивости или терпения. И стало интересно, у большинства такая же ситуация во время обучения, или нет. Моё это или может быть не стоит себя мучить. Интересно, нет ли вообще какого-нибудь универсального способа проверить себя на пригодность к этой профессии.
Способности есть у всех, либо интересно и начинаешь учить читать и пробовать либо нет. Я начинал с книги Марка Лутца Изучаем питон
 
  • Мне нравится
Реакции: Grizlyman

Форум IT Специалистов