Раздел 45 · Python backend: Тарбадель

Pattern matching, sentinel и моржовый оператор

middle~45 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Склад ключей Квота стоит в машинном зале уже второй день, и всё Подземье кладёт туда, что открыто, что закрыто и сколько раз. Разбор команд у Квота такой:

class Store:
    def __init__(self):
        self.data = {}

    def execute(self, line):
        parts = line.split()
        if len(parts) == 0:
            return "ERR empty command"
        if parts[0] == "set" and len(parts) == 3:
            self.data[parts[1]] = parts[2]
            return "OK"
        if parts[0] == "get" and len(parts) == 2:
            value = self.data.get(parts[1])
            if value is None:
                return "(nil)"
            return value
        if parts[0] == "del" and len(parts) >= 2:
            removed = 0
            for key in parts[1:]:
                if key in self.data:
                    del self.data[key]
                    removed += 1
            return f"(integer) {removed}"
        return f"ERR unknown command '{parts[0]}'"


store = Store()
print(store.execute("set шлюз открыт"))
print(store.execute("get шлюз"))
print(store.execute("get"))
OK
открыт
ERR unknown command 'get'

В прошлом уроке Квот принёс склад и с ним два вопроса: водопад из if, знакомый по уроку 39, и get, который не отличает «ключа нет» от ключа с None. Сегодня ты ответишь на оба. Первый закрывает оператор match, который сравнивает значение с образцом его формы. Второй закрывает метка «значения нет», которую нельзя спутать ни с одним настоящим значением. А по дороге встретишь оператор, который присваивает внутри выражения.

урок из курса

Урок из курса «Python backend: Тарбадель». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.