не могу решить задачу check_query()
Анфиса научилась отличать своё имя от других. Теперь надо научить её извлекать суть запроса.
Перепишите функцию check_query() так, чтобы при любом запросе она «отрезала» от строки имя и возвращала только запрос, без имени.
Например, если Анфисе пришёл запрос «Толя, что это за ерунда?» — функция check_query() должна вернуть строку ‘что это за ерунда?’.
подсказка: Верните из функции check_query() второй элемент списка elements
Решаю задачу и кажется что код правильный но он не работает
Здравствуйте все! Прохожу бесплатный курс на Яндекс Практикуме по Питону и застрял на одной задаче. Прошу не пугаться, что ниже такой длинный код, на самом деле тут всё просто, изменения нужны небольшие, только я уже 2 часа не могу понять, почему код не работает )). Просмотрел уже не один раз, ну ведь должен он работать )).
В общем суть в том, что программа должна выдать такой результат:
Анфиса, сколько у меня друзей? — У тебя 7 друзей
Анфиса, кто все мои друзья? — Твои друзья: Сергей, Соня, Миша, Дима, Алина, Егор, Коля
Анфиса, где все мои друзья? — Твои друзья в городах: Омск, Москва, Красноярск, Пермь, Челябинск
Анфиса, кто виноват? — <неизвестный запрос>
Коля, ты где? — Коля в городе Красноярск
Соня, что делать? — <неизвестный запрос>
Антон, ты где? — У тебя нет друга по имени Антон
Уберу в спойлер формулировку задания:
- Если друга с указанным именем 'Н' нет в списке, то функция должна вернуть сообщение об ошибке У тебя нет друга по имени Н.
- Если запрос — «ты где?», то функция должна вернуть сообщения 'Н в городе Г', где Г определяется по данным словаря DATABASE.
- Если запрос не «ты где?», а какой-то другой, то функция должна вернуть сообщение об ошибке <неизвестный запрос>.
- Коля, ты где?
- Соня, что делать?
- Антон, ты где?
Что-то неправильно написано в функции process_friend или в функции process_query. У меня получается такой результат (последние строки почему-то выводятся все в одну строку):
Анфиса, сколько у меня друзей? — У тебя 7 друзей
Анфиса, кто все мои друзья? — Твои друзья: Сергей, Соня, Миша, Дима, Алина, Егор, Коля
Анфиса, где все мои друзья? — Твои друзья в городах: Омск, Москва, Красноярск, Пермь, Челябинск
Анфиса, кто виноват?Коля, ты где?Соня, что делать?Антон, ты где? — <неизвестный запрос>
regnor
Модератор
- Окт 13, 2020
- #2
Grizlyman
Новичок
- Окт 13, 2020
- #3
Спасибо больше, и правда, дело оказалось в этом ))). Как же внимательно нужно всё смотреть. Я, кстати, ещё один момент исправил в коде, ну это уже так, не к конкретному вопросу темы относится:
regnor
Модератор
- Окт 13, 2020
- #4
Спасибо больше, и правда, дело оказалось в этом ))). Как же внимательно нужно всё смотреть. Я, кстати, ещё один момент исправил в коде, ну это уже так, не к конкретному вопросу темы относится:
Grizlyman
Новичок
- Окт 13, 2020
- #5
Да, согласен, нужно учесть это на будущее.
А мне ещё вот что интересно. Я прохожу курс с целью попробовать, узнать что такое программирование. Прошёл бесплатную часть курса веб-разработчик, по html и css сложностей для себя не увидел, по java script вроде тоже не показалось сложным, хотя по нему там было немного. А вот на Питоне я честно говоря малость просел. В том смысле, что например вот эту задачу, а также её предыдущую половину, решил с трудом, и то с подсказками и отчасти не понимая как решил. Как будто способностей не хватает, чтобы осилить подобные задачи. А может быть каких-то личных свойств, например усидчивости или терпения. И стало интересно, у большинства такая же ситуация во время обучения, или нет. Моё это или может быть не стоит себя мучить. Интересно, нет ли вообще какого-нибудь универсального способа проверить себя на пригодность к этой профессии.
не могу решить задачу check_query()
Анфиса научилась отличать своё имя от других. Теперь надо научить её извлекать суть запроса.
Перепишите функцию check_query() так, чтобы при любом запросе она «отрезала» от строки имя и возвращала только запрос, без имени.
Например, если Анфисе пришёл запрос «Толя, что это за ерунда?» — функция check_query() должна вернуть строку ‘что это за ерунда?’.
подсказка: Верните из функции check_query() второй элемент списка elements
# Множества
Вы узнали, как работают словари и уже можете написать код, который напечатает все любимые группы пользователя. Но всегда ли этот код будет работать хорошо?
Попробуйте запустить программу:
Как видите, в случае, если у нескольких песен один и тот же исполнитель, он появляется в выводе несколько раз. А зачем эти повторения? Вот когда нам поможет новый тип данных set (англ. set, здесь в значении «набор», «множество»). Множества часто называют сетами.
Тип set очень похож на список, но есть два важных отличия:
- Элементы в сете не повторяются, он избегает повторов, автоматически не вписывая их;
- Не гарантируется, что при выводе элементов на экран будет соблюден какой-то определенный порядок.
Любой список можно превратить в сет простым вызовом функции set() :
По элементам сета тоже можно пройти циклом, например вот так:
# Упражнения
- Сделайте из списка cities сет unique_cities , где записаны по разу названия городов, в которых живут ваши друзья. После этого напечатайте строку из элементов unique_cities на экран через запятую — да, join() работает и для множеств тоже!
- Для каждого уникального города в списке cities напечатайте на экран сообщение Один мой друг живет в городе <название города> .
# Операции с множествами
Вы умеете создавать множество из списка вызовом функции set() .
А вот что получится, если так превращать во множество строку:
В сете собраны все буквы из слова "сервер", каждая по одному разу.
Если вы хотите добавить в множество новый элемент, примените к сету метод add() (англ. add, «добавить»).
Множества в Python хороши тем, что их легко объединять. Допустим, вы составляете из двух списков новогодних песен плейлист. Да ещё так, чтобы ни одна песня не повторялась. Для объединения двух множеств к первому применяют метод union() (англ. union, «объединение»), передавая ему второе множество как аргумент:
Если же вам хочется получить новые впечатления и узнать, какие песни есть в плейлисте вашего друга, а в вашем нет — поможет метод difference() (англ. difference «разница, разность»). Его вызов записывается как set1.difference(set2) и возвращает новое множество, которое содержит только те элементы, которые присутствуют в set1 , но отcутствуют в set2 .
Можно также найти пересечение двух множеств, то есть элементы, которые есть в обоих. Вот, например, списки фильмов, просмотренных и вами, и вашей подругой. Надо знать, какие фильмы можно обсуждать, не боясь спойлеров. Для этого используется метод intersection() (англ. intersection «пересечение»):
# Упражнения
- Если вы захотите научить Виту играть в города, ей нужно будет уметь выбирать город из множества городов, которые она знает, исключая те, что уже были названы.
Напишите функцию print_valid_cities , которая сравнит множество всех городов all_cities со множеством названных городов used_cities и:
- создаст множество городов, которые ещё можно использовать,
- напечатает такое множество на экран, разделяя города запятой.
- запустите эту функцию на примерах разных множеств и посмотрите, как она работает.
- Научите Виту помогать вам с покупками в магазине. Вы хотите приготовить два блюда и рассказываете Вите, какие для них нужны продукты.
Напишите функцию print_shopping_list() , которая будет получать два списка продуктов — recipe1 и recipe2 , и печатать на экран полный список покупок. Элементы в списке не должны повторяться.
- Если вам надо 5 кг помидоров для салата и 3 кг для супа, вы сразу покупаете 8 килограммов.
Напишите функцию, которая напечатает на экран, какие продукты надо купить, и сколько их нужно. Информацию о каждом ингредиенте выводите на отдельной строке в формате: огурцы, кг: 1.5 . Каждый продукт должен присутствовать в выводе только один раз.
Результат должен получиться:
# Проверка наличия элемента
В Python списки, словари и множества называются коллекции. Их можно легко различить по записи:
Проверить, есть ли определённый элемент в списке или множестве, можно условной конструкцией оператором in (англ. in, «в»):
Особенность есть у словарей — в них in засекает только ключи:
Когда нужно написать условие, что чего-нибудь в коллекции нет, помогает логический оператор not (англ. not, «не»)
У списков есть метод append() (англ. append, «добавлять в конец»), который добавляет свой аргумент в конец списка:
Можно написать функцию пополнения любых списков, назовём её new_one (англ. new one, «новичок»)