Ответсообщение недоступно
from datetime import datetime
import re
# Глобальная переменная для хранения данных
_database = []
def insert(*users):
"""Добавляет пользователей в базу данных"""
for user in users:
# Проверяем уникальность id и name
if any(u['id'] == user['id'] for u in _database):
raise ValueError(f"User with id {user['id']} already exists")
if any(u['name'] == user['name'] for u in _database):
raise ValueError(f"User with name {user['name']} already exists")
_database.append(user)
def select(condition=None):
"""Выбирает пользователей по условию или всех, если условие не задано"""
filtered_users = _database.copy()
if condition:
# Парсим условие
match = re.match(r'^(\w+)\s*(<=|>=|<|>|=)\s*(.+)$', condition.strip())
if not match:
raise ValueError("Invalid condition format")
field, operator, value = match.groups()
def compare(user):
try:
# Для поля birth сравниваем как дату
if field == 'birth':
user_date = datetime.strptime(user[field], '%d.%m.%Y')
target_date = datetime.strptime(value, '%d.%m.%Y')
if operator == '<':
return user_date < target_date
elif operator == '>':
return user_date > target_date
elif operator == '<=':
return user_date <= target_date
elif operator == '>=':
return user_date >= target_date
elif operator == '=':
return user_date == target_date
# Для других полей сравниваем как строки или числа
user_value = user[field]
if operator == '<':
return user_value < type(user_value)(value)
elif operator == '>':
return user_value > type(user_value)(value)
elif operator == '<=':
return user_value <= type(user_value)(value)
elif operator == '>=':
return user_value >= type(user_value)(value)
elif operator == '=':
return str(user_value) == value
except (KeyError, ValueError):
return False
filtered_users = [u for u in filtered_users if compare(u)]
# Сортируем по id перед возвратом
return sorted(filtered_users, key=lambda x: x['id'])