57 lines
1.3 KiB
Python
57 lines
1.3 KiB
Python
"""
|
|
Puzzle 模块 - 谜题生成系统
|
|
|
|
提供多种类型的谜题生成器,支持从字符串、字典等数据源导入题目
|
|
"""
|
|
|
|
from .base import BasePuzzle
|
|
from .cloze import ClozePuzzle
|
|
from .mcq import MCQPuzzle
|
|
from .recognition import RecognitionPuzzle
|
|
|
|
__all__ = [
|
|
"BasePuzzle",
|
|
"ClozePuzzle",
|
|
"MCQPuzzle",
|
|
"RecognitionPuzzle",
|
|
]
|
|
|
|
puzzles = {
|
|
"mcq": MCQPuzzle,
|
|
"cloze": ClozePuzzle,
|
|
"recognition": RecognitionPuzzle,
|
|
"base": BasePuzzle,
|
|
}
|
|
|
|
|
|
@staticmethod
|
|
def create_by_dict(config_dict: dict) -> BasePuzzle:
|
|
"""
|
|
根据配置字典创建谜题
|
|
|
|
Args:
|
|
config_dict: 配置字典,包含谜题类型和参数
|
|
|
|
Returns:
|
|
BasePuzzle: 谜题实例
|
|
|
|
Raises:
|
|
ValueError: 当配置无效时抛出
|
|
"""
|
|
puzzle_type = config_dict.get("type")
|
|
|
|
if puzzle_type == "cloze":
|
|
return puzzles["cloze"](
|
|
text=config_dict["text"],
|
|
min_denominator=config_dict.get("min_denominator", 7),
|
|
)
|
|
elif puzzle_type == "mcq":
|
|
return puzzles["mcq"](
|
|
mapping=config_dict["mapping"],
|
|
jammer=config_dict.get("jammer", []),
|
|
max_riddles_num=config_dict.get("max_riddles_num", 2),
|
|
prefix=config_dict.get("prefix", ""),
|
|
)
|
|
else:
|
|
raise ValueError(f"未知的谜题类型: {puzzle_type}")
|