帮助中心 / 首页

能力边界

本文说明「3D 编程闯关」的代码解释器支持哪些语法、有哪些安全护栏,以及通关判定能验证与不能验证什么。

1. 解释器是什么

闯关页执行的是平台自研的轻量 Python 子集解释器(纯浏览器端运行,不使用 eval),它支持常见的入门语法,但不是完整的 Python。

2. 支持的语法

语句

  • 变量赋值(含 +=、-= 等复合赋值)
  • 表达式语句(如函数调用)
  • 条件:if / elif / else
  • 循环:while、for ... in range(...)
  • 函数定义:def、return
  • break、continue、pass

表达式

  • 数字、字符串、布尔值(True / False)、None
  • 列表、下标取值(lst[i])、属性访问(obj.method)
  • 函数调用、一元运算(- / not)
  • 二元运算:+ - * / % // **
  • 比较运算:< <= > >= == !=
  • 逻辑运算:and / or / not

内置函数

函数 说明
print(...) 输出到「运行结果」面板
get_object('id') 获取 3D 物体对象(等价于直接用变量名)
wait(秒) 暂停一段时间(可配合速度调节做动画演示)
str / int / float 类型转换
len(...) 字符串或列表长度
range(n) / range(a, b) / range(a, b, step) 生成整数序列

3D 物体方法

  • move(dx, dy, dz)、move_to(x, y, z)
  • rotate(axis, deg)(axis 取 'x' / 'y' / 'z')
  • set_color('#rrggbb')
  • get_position()(返回 [x, y, z])

3. 不支持的语法

  • import / 第三方库、文件与网络操作
  • 类与对象定义(class)、装饰器、上下文管理器(with)
  • 字典 / 集合、异常处理(try / except)、三元表达式
  • 字典推导、生成器、lambda 等高级特性

提示:如果用了不支持的语法,页面会给出带行号的中文错误提示,请按提示改用上面的语法子集。

4. 安全护栏

为了让学生即使写出死循环也不会卡死浏览器,解释器内置了多重护栏:

护栏 默认上限 触发后
最大执行步数 20000 步 自动停止并提示「执行步数超限」
最大墙钟时长 10 秒 自动停止并提示「执行超时」
单个循环最大迭代次数 5000 次 自动停止并提示「循环迭代次数超限」
函数递归深度 200 层 抛出中文错误

此外还会在长时间运行时主动让出浏览器事件循环,因此 while True 也不会把页面卡死,且随时可以「暂停 / 停止」。

提示:程序执行是可中断、可单步、可调速的;所有报错都是可读的中文提示,而不是浏览器崩溃。

5. 判定能验证什么

判定基于程序结束时的场景快照(各物体的位置、旋转、颜色、数量等),支持五类条件:

  • 位置:物体的三维坐标与目标点的距离是否在容差内。
  • 旋转:物体绕指定轴的欧拉角是否接近目标角度(考虑 360° 环绕)。
  • 颜色:物体颜色与目标颜色的逐通道差值是否在容差内。
  • 碰撞:两个物体中心距离是否小于「半径之和 ×(1+容差)」。
  • 数量:场景中(全部或仅动态)物体数量是否达到目标数量。

条件可用 AND(全部满足)或 OR(满足任一)组合。

6. 判定不能验证什么

  • 不检查代码写法:只看最终场景状态,循环还是展开、用积木还是代码,只要结果达标即通关。
  • 不检查过程:判定发生在运行结束时,无法验证「中途必须经过某点 / 顺序」这类过程性要求(如需此类关卡,请拆成多关或用 count 等间接约束)。
  • 不做精确几何碰撞:碰撞条件用包围球半径近似,不适合判断复杂形状的精细贴合。
  • 不校验性能与代码质量:护栏只防止死循环、超时等失控情况,不评价算法效率或代码风格。

7. 物理与模型的边界

  • 物理:关卡可在 scene_json 中开启物理(引擎为 cannon-es)。动态物体会受重力下落并与静态物体碰撞,刚体形状为盒体或球体(根据图元推导);暂不支持关节、约束、布料等复杂物理。
  • 物理关卡请等物体稳定后再判定;判定读取的是物理同步后的真实位置。
  • 外部模型:引擎不支持外部 GLB / GLTF 模型加载——场景元素一律由内置图元(立方体 / 球体 / 圆柱 / 圆锥 / 平面)程序化拼装,不依赖外部素材文件。如需手绘 / 定制素材,走 sprite 图集通道:主题变体声明 atlas/size/anchor/frame/fallbackShape,图集缺失或加载失败时自动回退程序化造型,不影响关卡游玩。

相关阅读