世界机器人大会青少年机器人设计与信息素养大赛2025-2026 学年算法应用主题赛 / 初中组wrc.hao.work
WRCWorld Robot Contest青少年算法应用训练档案馆
四大文化场景完整题库档案HTTPS 资料库
07-language-guides/python-guide.md

Python 赛题实现指引

Python 在算法应用主题赛里最常见的价值,不是“写得短”,而是“能把思路快速、清楚、稳定地落地”。对初中组和带训场景来说,Python 很适合作为第一实现语言。

关联训练题0

语言指引总览

Python 在算法应用主题赛里最常见的价值,不是“写得短”,而是“能把思路快速、清楚、稳定地落地”。对初中组和带训场景来说,Python 很适合作为第一实现语言。

适用场景

  • 数据管理题:清洗记录、分类、分组、聚合。
  • 流程模拟题:状态更新清晰、代码接近自然语言。
  • 综合分析题:排序、评分、分级、文本建议生成。
  • 趋势分析题:时间序列、窗口统计、字典计数。
  • 传播仿真题:队列、集合、邻接表实现简洁。

当题目数据规模不是极限、且重点在规则处理时,Python 往往是效率最高的训练语言。

推荐代码组织

基本结构

import sys


def solve() -> None:
    data = sys.stdin.read().strip().split()
    if not data:
        return

    # 解析输入
    # 处理逻辑
    # 输出结果


if __name__ == "__main__":
    solve()

为什么推荐 solve()

  • 结构清楚,便于复盘。
  • 便于后续把局部逻辑拆成函数。
  • 如果要做本地测试,可以更容易复用主逻辑。

常用模板选择

读入模板

  • 行结构简单时可用 input()
  • 数据量偏大或格式规则时,优先用 sys.stdin.read()
  • 含空格文本或原始行记录时,优先用 sys.stdin.readline()splitlines()

数据结构模板

  • 顺序容器:list
  • 去重与访问:set
  • 键值统计:dict
  • 频次统计:collections.Counter
  • 队列模拟:collections.deque
  • 优先级处理:heapq

排序模板

items.sort(key=lambda x: (x[1], -x[2], x[0]))

适用在“先按一个指标升序,再按另一个指标降序,最后按名称升序”的题型中。排序前必须先明确 tie-break 规则。

Python 写题的五步法

  1. 先把输入样例手动拆开,确认每个字段的类型。
  2. 把核心数据对象设计成列表、字典或元组。
  3. 先写能跑通主流程的版本。
  4. 再补函数拆分、边界处理和输出格式。
  5. 最后做复杂度和样例复核。

典型算法展示

统计与分组

count_by_type = {}
for item in records:
    key = item["type"]
    count_by_type[key] = count_by_type.get(key, 0) + 1

适合文化对象统计、资源类别统计、传播渠道统计等场景。

滑动窗口

window_sum = 0
left = 0
for right, value in enumerate(values):
    window_sum += value
    while left <= right and window_sum > limit:
        window_sum -= values[left]
        left += 1

适合趋势分析、连续区间、容量控制等题型。

BFS

from collections import deque

queue = deque([start])
visited = {start}

while queue:
    node = queue.popleft()
    for nxt in graph[node]:
        if nxt not in visited:
            visited.add(nxt)
            queue.append(nxt)

适合传播仿真、网格最短步数、层级遍历类题型。

性能与稳定性建议

  • 不要在循环里频繁做高开销字符串拼接,优先先收集到列表再 "\n".join(...)
  • 多次查询的值尽量先存到局部变量。
  • 当数据量较大时,优先用内建排序和标准库,而不是手写低效版本。
  • 若只是求最值、计数、前缀统计,不要过早引入复杂结构。

常见错误

类型错误

  • 字符串和整数混用。
  • 百分比或比例没有转为数值。
  • 输入是浮点却按整数处理。

下标和边界错误

  • 列表越界。
  • 空输入没有提前返回。
  • 访问 i + 1i - 1 时漏掉边界判断。

可变对象错误

  • 多个变量引用同一个列表,修改时互相影响。
  • 使用 [[0] * m] * n 构造二维数组,导致整行联动。

输出错误

  • 多输出一个空格或换行。
  • 题目要求保留两位小数,但程序输出整数。
  • 应输出排序后的对象名,却误输出原始顺序。

自检清单

  • 每个字段类型是否正确。
  • 排序键与 tie-break 是否和题面一致。
  • 循环终止条件是否正确。
  • 是否覆盖空输入、单元素、极端值三类样例。
  • 输出格式是否逐字符核对过。

面向教学的建议

  • 对初学者,先让其把自然语言步骤写出来,再翻译成 Python。
  • 对进阶学生,要求把代码拆成“读入、处理、输出”三部分。
  • 对带训人员,建议统一维护题型模板库,减少学生在框架上重复犯错。