跳转至

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 题目通常需要以下字段:

必选字段

  1. id
    题目唯一标识(如 "P1001"),用于检索和管理。
  2. title
    题目标题(如 "A+B Problem"),便于用户识别。
  3. description
    题目描述,详细说明题目的背景和要求。
  4. input_description
    输入格式说明,告诉用户输入数据的格式和要求。
  5. output_description
    输出格式说明,告诉用户输出数据的格式和要求。
  6. samples
    样例输入输出,通常为一个列表,每个元素包含 input 和 output 字段,帮助用户理解题意。
  7. constraints
    数据范围和限制条件(如 |a|,|b| ≤ 10^9),用于明确输入输出的边界。
  8. testcases 测试点,代码准确性通过测试点通过比例给出,会按难易划分,经常有毒瘤出题人卡常、造临界情况等。

可选字段

  1. hint
    额外提示,帮助用户解题(如"有负数哦!")。
  2. source
    题目来源或出处。
  3. tags
    题目标签,便于分类检索(如"基础题"、"模拟")。
  4. time_limit
    时间限制(如 1s),用于评测。
  5. memory_limit
    内存限制(如 128MB),用于评测。
  6. author
    题目作者。
  7. 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
作者:Haoran Wang