Step1:题目管理
模块目标¶
实现题目配置的加载、动态增删与查询,支持基础的 OJ 题目管理闭环。
前置知识要求¶
技术点 | 推荐学习内容 |
---|---|
JSON 配置文件 | json.load() |
REST API 基础 | FastAPI/Flask POST/GET/DELETE + 参数校验 |
异常处理 | try/except 、HTTP 状态码 |
任务分解¶
具体字段与接口请参考 api.md
任务 1:题目管理 API¶
- 目标:实现题目配置的加载、增删与查询。
- 要点:
- 支持查看题目列表(返回所有题目的简要信息)。
- 支持添加题目(校验字段完整性,保存到存储目录)。
- 支持删除题目(根据题目 id 删除配置文件)。
- 支持查看具体题目信息(根据题目 id 返回详细配置)。
- 所有操作需返回结构化 JSON,异常时返回合理 HTTP 状态码。
- 建议:配置内容存入本地目录(如
problems/
),每题一个 JSON 文件。
OJ 题目字段说明¶
以洛谷 P1001 A+B Problem 为例,一个 OJ 题目通常需要以下字段:
必选字段¶
- id
题目唯一标识(如 "P1001"),用于检索和管理。 - title
题目标题(如 "A+B Problem"),便于用户识别。 - description
题目描述,详细说明题目的背景和要求。 - input_description
输入格式说明,告诉用户输入数据的格式和要求。 - output_description
输出格式说明,告诉用户输出数据的格式和要求。 - samples
样例输入输出,通常为一个列表,每个元素包含 input 和 output 字段,帮助用户理解题意。 - constraints
数据范围和限制条件(如 |a|,|b| ≤ 10^9),用于明确输入输出的边界。 - testcases 测试点,代码准确性通过测试点通过比例给出,会按难易划分,经常有毒瘤出题人卡常、造临界情况等。
可选字段¶
- hint
额外提示,帮助用户解题(如"有负数哦!")。 - source
题目来源或出处。 - tags
题目标签,便于分类检索(如"基础题"、"模拟")。 - time_limit
时间限制(如 1s),用于评测。 - memory_limit
内存限制(如 128MB),用于评测。 - author
题目作者。 - difficulty
难度等级。
示例结构(JSON)¶
{
"id": "P1001",
"title": "A+B Problem",
"description": "输入两个整数 a, b,输出它们的和(|a|,|b| <= 10^9)。",
"input_description": "输入两个整数 a 和 b。",
"output_description": "输出 a+b 的结果。",
"samples": [
{
"input": "1 2",
"output": "3"
}
],
"constraints": "|a|,|b| <= 10^9",
"testcases": [
{
"input": "1 2",
"output": "3"
}
],
"hint": "有负数哦!",
"source": "洛谷",
"tags": ["基础题"],
"time_limit": "1s",
"memory_limit": "128MB",
"author": "Luogu",
"difficulty": "入门"
}
评分细则¶
功能/接口 | 分值 | 评分说明 |
---|---|---|
题目列表/详情 API | 3 | 路径、参数、响应、异常 |
题目增删 API | 2 | 路径、参数、响应、异常 |
小计 | 5 |
作者: