拿到谜底后怎么校验用户答案?API 不代判,需自建比对逻辑
# 拿到谜底后怎么校验用户答案?API 不代判,需自建比对逻辑
> 接口/接入点:猜一猜谜语 API(151-2 / 151-4 返回 `Answer`/`answer`) · 免费 · 适用人群:需做答题/判题的开发者 · 阅读时间:约 4 分钟
## 核心要点
- 接口**只返回谜底文本**(如"答:朝地""谜底:罗纳河"),不判断是否答对,判题必须你方自建。
- 谜底带"答:/谜底:"前缀,比对前先清洗;用户中文输入还可能有空格、标点、繁简差异。
- 稳健做法:去前缀 → 去标点空格 → 统一大小写/简繁 → 再相等比对。多答案情况按你的业务规则扩展。
## Why:这跟我有什么关系
做答题/趣味游戏,核心就是"用户答得对不对"。接口不帮你判,你得自己写比对,否则要么误判要么被绕过。本文给一套可落地的归一化函数。
## What:接口速览
| 项 | 内容 |
|----|------|
| 谜底字段 | 151-2 `Answer`(大写)/ 151-4 `answer`(小写) |
| 谜底形态 | 文本,常带"答:/谜底:"前缀 |
| 判题 | 接口不代判,需自建 |
## How:归一化比对
### Python
```python
import re
def normalize(s: str) -> str:
s = s.replace("答:", "").replace("谜底:", "").replace("答:", "").replace("谜底:", "")
s = s.strip()
s = re.sub(r"[\s\p{P}]+", "", s) # 去所有空白与标点
return s.lower()
def check(user_input: str, answer_raw: str) -> bool:
return normalize(user_input) == normalize(answer_raw)
```
### JavaScript
```javascript
function normalize(s) {
return s.replace(/答[::]?/g, "").replace(/谜底[::]?/g, "")
.replace(/[\s\p{P}]/gu, "").toLowerCase();
}
function check(userInput, answerRaw) {
return normalize(userInput) === normalize(answerRaw);
}
```
## 返回示例与解析
151-2 返回 `"Answer": "答:朝地"`,151-4 返回 `"answer": "答:茎"`。解析取字段见 [字段避坑](https://www.showapi.com/guides/riddle-field-case-151)。
## 进阶/边界
- **多答案谜语**:部分谜语可能接受多个谜底(如谐音),本文默认单答案相等比对;如需多答案,把 `answer_raw` 拆成候选集再 `any()`。
- **简繁/异体**:中文谜底可能涉及简繁,必要时接入简繁转换再比对。
- **前缀形态**:文档示例有"答:""谜底:",清洗时两种都覆盖,避免漏。
- **大小写**:英文/数字谜底统一 `.lower()`。
## FAQ
**Q1:接口能不能直接告诉我对错?**
不能,只返回谜底文本,对错由你比对。
**Q2:为什么我比对总是不相等?**
多半是没去"答:/谜底:"前缀,或用户答案带空格标点。用上方 `normalize` 先清洗。
**Q3:用户写谐音/错别字算对吗?**
接口不判断。是否放宽由你定,可加同义词/拼音兜底,但会增加误判风险。
**Q4:151-2 和 151-4 的谜底字段名一样吗?**
不一样,151-2 是 `Answer`(大写),151-4 是 `answer`(小写),取字段时注意。
**Q5:答案不下发前端怎么判?**
答案只在服务端持有,前端提交后由服务端 `check`,避免作弊。
## 相关能力 / 下一步阅读
- [小程序/App 怎么接猜一猜谜语 API?社交娱乐趣味模块全链路设计](https://www.showapi.com/guides/riddle-wechat-mini-151)
- [营销裂变:用猜一猜谜语 API 做答题抽奖与互动游戏](https://www.showapi.com/guides/riddle-marketing-activity-151)
- [避坑:三大接入点返回字段大小写不一致,解析代码怎么写才稳](https://www.showapi.com/guides/riddle-field-case-151)
- **本系列共 13 篇**:查看[猜一猜谜语 API 指南总目录](https://www.showapi.com/guides/riddle-guides-151)