diff --git a/data/nucleon/test2.toml b/data/nucleon/test2.toml index 629f36f..42ce6ef 100644 --- a/data/nucleon/test2.toml +++ b/data/nucleon/test2.toml @@ -21,8 +21,8 @@ tts_text = "eval:nucleon['content'].replace('/', '')" ["__metadata__.orbital.puzzles"] # 谜题定义 # 我们称 "Recognition" 为 recognition 谜题的 alia "Recognition" = { __origin__ = "recognition", __hint__ = "", primary = "eval:nucleon['content']", secondary = ["eval:nucleon['keyword_note']", "eval:nucleon['note']"], top_dim = ["eval:nucleon['translation']"] } -"SelectMeaning" = { __origin__ = "mcq", __hint__ = "eval:nucleon['content']", primary = "eval:nucleon['content']", mapping = "eval:nucleon['keyword_note']", jammer = "eval:nucleon['keyword_note']", max_riddles_num = "eval:default['mcq']['max_riddles_num']", prefix = "选择正确项: " } -"FillBlank" = { __origin__ = "mcq", __hint__ = "eval:nucleon['content']", primary = "eval:nucleon['content']", mapping = "eval:nucleon['keyword_note']", jammer = "eval:nucleon['keyword_note']", max_riddles_num = "eval:default['mcq']['max_riddles_num']", prefix = "选择正确项: " } +"SelectMeaning" = { __origin__ = "mcq", __hint__ = "eval:nucleon['content']", primary = "eval:nucleon['content']", mapping = "eval:nucleon['keyword_note']", jammer = "eval:list(nucleon['keyword_note'].values())", max_riddles_num = "eval:default['mcq']['max_riddles_num']", prefix = "选择正确项: " } +"FillBlank" = { __origin__ = "mcq", __hint__ = "eval:nucleon['content']", primary = "eval:nucleon['content']", mapping = "eval:nucleon['keyword_note']", jammer = "eval:list(nucleon['keyword_note'].values())", max_riddles_num = "eval:default['mcq']['max_riddles_num']", prefix = "选择正确项: " } #"FillBlank" = { __origin__ = "cloze", __hint__ = "", text = "eval:nucleon['content']", delimiter = "eval:metadata['formation']['delimiter']", min_denominator = "eval:default['cloze']['min_denominator']"} #debug ["__metadata__.orbital.schedule"] # 内置的推荐学习方案 diff --git a/src/heurams/interface/screens/memorizor.py b/src/heurams/interface/screens/memorizor.py index a82f4e2..d51ab9c 100644 --- a/src/heurams/interface/screens/memorizor.py +++ b/src/heurams/interface/screens/memorizor.py @@ -6,6 +6,7 @@ from textual.screen import Screen from textual.reactive import reactive from enum import Enum, auto +from heurams.services.logger import get_logger from heurams.context import config_var from heurams.kernel.reactor import * import heurams.kernel.particles as pt @@ -17,6 +18,7 @@ class AtomState(Enum): FAILED = auto() NORMAL = auto() +logger = get_logger(__name__) class MemScreen(Screen): BINDINGS = [ @@ -40,9 +42,9 @@ class MemScreen(Screen): super().__init__(name, id, classes) self.atoms = atoms self.phaser = Phaser(atoms) - # print(self.phaser.state) + # logger.debug(self.phaser.state) self.procession: Procession = self.phaser.current_procession() # type: ignore - # print(self.phaser.state) + # logger.debug(self.phaser.state) # self.procession.forward(1) def on_mount(self): @@ -51,22 +53,20 @@ class MemScreen(Screen): def puzzle_widget(self): try: - # print(self.phaser.state) - print("---debug---") - print(self.procession.cursor) - print(self.procession.current_atom) + # logger.debug(self.phaser.state) + #logger.debug(self.procession.cursor) + #logger.debug(self.procession.current_atom) self.fission = Fission(self.procession.current_atom, self.phaser.state) - # print(1) - print("---debug---") - puzzle_info = next(self.fission.generate()) - print(puzzle_info) - return shim.puzzle2widget[puzzle_info["puzzle"]]( - atom=self.procession.current_atom, alia=puzzle_info["alia"] + # logger.debug(1) + puzzle_debug = next(self.fission.generate()) + #logger.debug(puzzle_debug) + return shim.puzzle2widget[puzzle_debug["puzzle"]]( + atom=self.procession.current_atom, alia=puzzle_debug["alia"] ) except (KeyError, StopIteration, AttributeError) as e: - print(f"调度展开出错: {e}") + logger.debug(f"调度展开出错: {e}") return Static("无法生成谜题") - # print(shim.puzzle2widget[puzzle_info["puzzle"]]) + # logger.debug(shim.puzzle2widget[puzzle_debug["puzzle"]]) def compose(self) -> ComposeResult: yield Header(show_clock=True) @@ -98,7 +98,7 @@ class MemScreen(Screen): ret = self.procession.forward(1) if ret == 0: self.procession = self.phaser.current_procession() # type: ignore - print(f"NEWPROC {self.procession.cursor}") + logger.debug(f"建立新队列 {self.procession.phase}") self.load_puzzle() def action_play_voice(self): diff --git a/src/heurams/interface/widgets/mcq_puzzle.py b/src/heurams/interface/widgets/mcq_puzzle.py index 9d0f386..ebdcffa 100644 --- a/src/heurams/interface/widgets/mcq_puzzle.py +++ b/src/heurams/interface/widgets/mcq_puzzle.py @@ -57,7 +57,7 @@ class MCQPuzzle(BasePuzzleWidget): self.puzzle.refresh() def compose(self): - setting: Setting = self.atom.registry["nucleon"].metadata["orbital"]["puzzle"][ + setting: Setting = self.atom.registry["nucleon"].metadata["orbital"]["puzzles"][ self.alia ] yield Label(setting["primary"], id="sentence") diff --git a/src/heurams/kernel/particles/atom.py b/src/heurams/kernel/particles/atom.py index 79b4c1b..e008bff 100644 --- a/src/heurams/kernel/particles/atom.py +++ b/src/heurams/kernel/particles/atom.py @@ -80,9 +80,13 @@ class Atom: metadata = nucleon.metadata except: ret = "尚未链接对象" - try: - ret = str(eval(s)) - logger.debug("eval 执行成功: '%s' -> '%s'", s, ret[:50] + '...' if len(ret) > 50 else ret) + try: + eval_value = eval(s) + if isinstance(eval_value, (list, dict)): + ret = eval_value + else: + ret = str(eval_value) + logger.debug("eval 执行成功: '%s' -> '%s'", s, str(ret)[:50] + '...' if len(ret) > 50 else ret) except Exception as e: ret = f"此 eval 实例发生错误: {e}" logger.warning("eval 执行错误: '%s' -> %s", s, e) diff --git a/src/heurams/kernel/particles/nucleon.py b/src/heurams/kernel/particles/nucleon.py index a1c7fd5..a403d7f 100644 --- a/src/heurams/kernel/particles/nucleon.py +++ b/src/heurams/kernel/particles/nucleon.py @@ -54,8 +54,12 @@ class Nucleon: def eval_with_env(s: str): try: nucleon = self - ret = str(eval(s)) - logger.debug("eval 执行成功: '%s' -> '%s'", s, ret[:50] + '...' if len(ret) > 50 else ret) + eval_value = eval(s) + if isinstance(eval_value, (int, float)): + ret = str(eval_value) + else: + ret = eval_value + logger.debug("eval 执行成功: '%s' -> '%s'", s, str(ret)[:50] + '...' if len(ret) > 50 else ret) except Exception as e: ret = f"此 eval 实例发生错误: {e}" logger.warning("eval 执行错误: '%s' -> %s", s, e) diff --git a/src/heurams/kernel/puzzles/mcq.py b/src/heurams/kernel/puzzles/mcq.py index a05df4e..ab11d26 100644 --- a/src/heurams/kernel/puzzles/mcq.py +++ b/src/heurams/kernel/puzzles/mcq.py @@ -6,7 +6,6 @@ from heurams.services.logger import get_logger logger = get_logger(__name__) - class MCQPuzzle(BasePuzzle): """选择题谜题生成器 @@ -58,6 +57,8 @@ class MCQPuzzle(BasePuzzle): jammer: 传入的干扰项列表 """ # 合并正确答案和传入的干扰项, 并去重 + logger.debug(f"答案映射: {self.mapping}, {type(self.mapping)}") + logger.debug(f"干扰项: {jammer}, {type(jammer)}") unique_jammers = set(jammer + list(self.mapping.values())) self.jammer = list(unique_jammers)