game_data.py 956 B

123456789101112131415161718192021222324252627282930313233343536
  1. from pydantic import BaseModel, Field
  2. from typing import List
  3. class Solution(BaseModel):
  4. """解决方案模型
  5. 表示24点游戏的一个解法
  6. """
  7. expression: str = Field(alias="c")
  8. flag: int = Field(alias="f")
  9. @classmethod
  10. def from_dict(cls, data):
  11. return cls.model_validate(data)
  12. class GameData(BaseModel):
  13. """游戏数据模型
  14. 表示24点游戏的一组数据,包含四个数字和对应的解法
  15. """
  16. id: int
  17. num1: int = Field(alias="n1")
  18. num2: int = Field(alias="n2")
  19. num3: int = Field(alias="n3")
  20. num4: int = Field(alias="n4")
  21. solutions: List[Solution] = Field(alias="s")
  22. @property
  23. def no(self):
  24. return f"{self.num1}_{self.num2}_{self.num3}_{self.num4}"
  25. @classmethod
  26. def from_dict(cls, data):
  27. data['s'] = [Solution.from_dict(sol) for sol in data['s']] # 保持原始JSON键's'的解析
  28. return cls.model_validate(data)