Ответсообщение недоступно
Вот генерация в хроме:
import re
from datetime import datetime
# Глобальный список для хранения документов (словарей пользователей)
_db = []
def insert(*users):
"""
Добавляет одного или нескольких пользователей в базу данных.
Принимает как отдельные словари, так и распакованные аргументы.
"""
global _db
for user in users:
# Проверяем на уникальность id перед добавлением (опционально)
if not any(existing["id"] == user["id"] for existing in _db):
_db.append(user)
def select(criteria_str=None):
"""
Выбирает пользователей из базы данных по заданному критерию.
Результат всегда отсортирован по возрастанию 'id'.
"""
global _db
# Сначала сортируем всю базу по возрастанию id при помощи лямбда-функции
sorted_db = sorted(_db, key=lambda x: x["id"])
# Если критерий поиска не задан, возвращаем всех пользователей
if not criteria_str:
return sorted_db
# Разбираем строку критерия вида: <имя_поля> <оператор> <значение>
# Поддерживаемые операторы: ==, !=, >=, <=, >, <
match = re.match(r"^\s*([a-zA-Z_]\w*)\s*(==|!=|>=|<=|>|<)\s*(.+)$", criteria_str)
if not match:
return [] # Если формат строки не совпал с шаблоном, возвращаем пустой список
field, operator, crit_value = match.groups()
field = field.strip()
operator = operator.strip()
crit_value = crit_value.strip()
# Очищаем строковое значение от лишних кавычек, если они были переданы в условии
if (crit_value.startswith("'") and crit_value.endswith("'")) or (
crit_value.startswith('"') and crit_value.endswith('"')
):
crit_value = crit_value[1:-1]
result = []
for user in sorted_db:
# Если у пользователя нет искомого поля, пропускаем его
if field not in user:
continue
user_value = user[field]
# Приведение типов для корректного сравнения
if field == "id":
val1, val2 = int(user_value), int(crit_value)
elif field == "birth":
# Конвертируем DD.MM.YYYY в объект datetime для правильного сравнения дат
val1 = datetime.strptime(user_value, "%d.%m.%Y")
val2 = datetime.strptime(crit_value, "%d.%m.%Y")
else:
val1, val2 = str(user_value), str(crit_value)
# Проверка выполнения условия оператора сравнения
is_match = False
if operator == "==":
is_match = val1 == val2
elif operator == "!=":
is_match = val1 != val2
elif operator == ">=":
is_match = val1 >= val2
elif operator == "<=":
is_match = val1 <= val2
elif operator == ">":
is_match = val1 > val2
elif operator == "<":
is_match = val1 < val2
if is_match:
result.append(user)
return result
Все тесты проходит.