Найти в Дзене
Журнал разработчика

Запись 33. Почти база данных

Сегодня поработаем со словарём так, будто это база данных (БД). Для этого возьмём словарь, состоящий из моделей и марок автомобилей и поместим его в переменную DATABASE. Так как в Python нет констант как таковых, данные, которые не планируется изменять пишут заглавными буквами. Вкратце обрисую задачу. Напишем простенький прототип бота, который будет отвечать на три вопроса: Для этого напишем функцию, которая будет обрабатывать запросы с помощью каскада ветвлений, подготавливать ответ и возвращать его нам. Роль бота в нашем случае будет играть функция response_bot(). Приступим к ответу на первый вопрос Ответ на этот вопрос кроется в количестве элементов нашего словаря DATABASE. Получаем его с помощью функции len(). Разберём построчно: Обратите внимание на 16 строку. Здесь для создания сообщения я использую f-строку. Если надо вспомнить, что это, загляните сюда. С первым вопросом разобрались. На очереди второй Марки машин хранятся в значениях словаря DATABASE. Получить их нам поможет мет
Оглавление

Сегодня поработаем со словарём так, будто это база данных (БД). Для этого возьмём словарь, состоящий из моделей и марок автомобилей и поместим его в переменную DATABASE. Так как в Python нет констант как таковых, данные, которые не планируется изменять пишут заглавными буквами.

За содержимое строго не судите, взял первую попавшуюся подборку из сети )
За содержимое строго не судите, взял первую попавшуюся подборку из сети )

Вкратце обрисую задачу. Напишем простенький прототип бота, который будет отвечать на три вопроса:

  1. Сколько у нас машин?
  2. Какие марки машин у нас есть?
  3. Какие модели машин у нас есть?

Для этого напишем функцию, которая будет обрабатывать запросы с помощью каскада ветвлений, подготавливать ответ и возвращать его нам.

Как мог изобразил графически
Как мог изобразил графически

Роль бота в нашем случае будет играть функция response_bot().

Пока поставим заглушку "pass"
Пока поставим заглушку "pass"

Приступим к ответу на первый вопрос

Обращаемся к функции, передаём ей вопрос и ожидаем ответа для вывода на экран
Обращаемся к функции, передаём ей вопрос и ожидаем ответа для вывода на экран

Ответ на этот вопрос кроется в количестве элементов нашего словаря DATABASE. Получаем его с помощью функции len().

-5

Разберём построчно:

  • строка 15 – проверяем, пришёл ли запрос на количество машин
  • строка 16 – подготавливаем ответ и записываем его в переменную answer
  • строка 17 – возвращаем ответ в функцию print(), из которой осуществлялся вызов

Обратите внимание на 16 строку. Здесь для создания сообщения я использую f-строку. Если надо вспомнить, что это, загляните сюда.

С первым вопросом разобрались. На очереди второй

-6

Марки машин хранятся в значениях словаря DATABASE. Получить их нам поможет метод values(). Но тут есть ещё один нюанс. Марки автомобилей повторяются, а нам нужны только уникальные значения. Самое время вспомнить про множества set().

-7

И снова пробежимся по строкам:

  • строка 18 – с помощью каскадного ветвления проверяем, что вопрос именно про перечень марок машин
  • строка 19 – получаем список значений из словаря DATABASE методом values(), преобразуем их во множество, чтобы исключить повторяющиеся значения. Затем объединяем их в одну строку через запятую и пробел с помощью метода join(). Результат сохраняем в переменную brand_list
  • строка 20 – подготавливаем ответ, в котором используем список марок, созданный строкой выше. Сохраняем его в переменную answer
  • строка 21 – возвращаем ответ в функцию print(), из которой осуществлялся вызов

Остался третий вопрос. Приступим

-8

Задача схожа с предыдущей, только здесь не требуется преобразование в set(). И нам требуются ключи, а значит будем использовать метод keys() (кстати, если его не указывать, то результат будет тот же, но лучше всё же явно указать на ключи).

-9
  • строка 22 – уточняем, что вопрос про модели
  • строка 23 – снова используем метод join() для объединения ключей в одну строку через запятую и пробел. Строку сохраняем в переменную model_list
  • строка 24 – составляем строку ответа и сохраняем её в переменную answer
  • строка 25 – возвращаем ответ в функцию print(), из которой осуществлялся вызов

В целом можно было бы закончить, но давайте добавим ещё один вопрос, ответить на который не получится, используя данные словаря DATABASE.

-10

Пока наша функция обрабатывает только три конкретных вопроса, а значит функция вернёт None, что нас не очень-то устроит. Исправим это, добавим ещё один return:

-11

Полный код получился таким:

-12

Вот теперь можно заканчивать. Вопросы и замечания в комментарии.

Полезные ссылки:

  • метод join()
  • каскад условий elif
  • возврат значений из функции
  • множества