|
|
@@ -822,13 +822,32 @@ def _brief(values: Sequence[str]) -> str:
|
|
|
return shown
|
|
|
|
|
|
|
|
|
+def _calc_parts(view: _View) -> tuple[str, tuple[str, ...]]:
|
|
|
+ """拆开代入/正向期望与分号后的说明。说明不进「期望:」行。"""
|
|
|
+
|
|
|
+ parts = [part.strip() for part in view.calc_text.split(";") if part.strip()]
|
|
|
+ if not parts:
|
|
|
+ return "", ()
|
|
|
+ return parts[0], tuple(parts[1:])
|
|
|
+
|
|
|
+
|
|
|
def _expect(view: _View) -> str:
|
|
|
if view.calc_value is None and view.verdict == VERDICT_SUSPECT:
|
|
|
return "期望值无法计算"
|
|
|
- head = view.calc_text.split(";", 1)[0].strip()
|
|
|
+ head, notes = _calc_parts(view)
|
|
|
+ number = _number(view.calc_value)
|
|
|
+ if notes:
|
|
|
+ # 有说明段时首段是正向期望或代入式。
|
|
|
+ if head and head != view.formula_text:
|
|
|
+ return head
|
|
|
+ if number is not None:
|
|
|
+ return number
|
|
|
+ return view.formula_text
|
|
|
if head and head != view.formula_text:
|
|
|
+ if view.calc_value is None and view.verdict == VERDICT_ERROR:
|
|
|
+ # 旧写法整段都是失败原因,期望改走公式,原因留给结论。
|
|
|
+ return view.formula_text
|
|
|
return head
|
|
|
- number = _number(view.calc_value)
|
|
|
if number is not None:
|
|
|
return number
|
|
|
return view.formula_text
|
|
|
@@ -847,18 +866,26 @@ def _actual(view: _View) -> str:
|
|
|
|
|
|
|
|
|
def _conclusion(view: _View) -> str:
|
|
|
+ head, notes = _calc_parts(view)
|
|
|
expected = _number(view.calc_value)
|
|
|
current = _number(view.check_value)
|
|
|
+ right = current if current is not None else "缺失"
|
|
|
if view.verdict == VERDICT_ERROR:
|
|
|
- left = expected if expected is not None else _expect(view)
|
|
|
- right = current if current is not None else "缺失"
|
|
|
+ if expected is not None:
|
|
|
+ return f"结论:错误。期望 {expected},当前 {right}。不符合预期。"
|
|
|
+ # 存在性/硬门槛:说明(或旧版整段原因)进结论,不再套「期望 {原因}」。
|
|
|
+ reason_parts = [part.strip().rstrip("。") for part in notes if part.strip()]
|
|
|
+ if not reason_parts and head and head != view.formula_text and view.calc_value is None:
|
|
|
+ reason_parts = [head.strip().rstrip("。")]
|
|
|
+ if reason_parts:
|
|
|
+ reason = "。".join(reason_parts)
|
|
|
+ return f"结论:错误。{reason},当前 {right}。不符合预期。"
|
|
|
+ left = _expect(view)
|
|
|
return f"结论:错误。期望 {left},当前 {right}。不符合预期。"
|
|
|
if view.verdict == VERDICT_SUSPECT and view.calc_value is None:
|
|
|
- right = current if current is not None else "缺失"
|
|
|
return f"结论:可疑。期望值无法计算,当前 {right}。"
|
|
|
if view.verdict == VERDICT_SUSPECT:
|
|
|
left = expected if expected is not None else _expect(view)
|
|
|
- right = current if current is not None else "缺失"
|
|
|
return f"结论:可疑。期望 {left},当前 {right}。无法判定。"
|
|
|
return "结论:正确"
|
|
|
|