You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何处理HTML textarea中的Python代码并验证两类编程题的正确性?

代码验证方案与两类题型处理方法

一、代码执行验证的可行性与安全前提

可以通过执行用户提交的Python代码来验证正确性,但必须严格隔离执行环境——绝对不能在服务器主进程里直接运行用户代码,否则会有恶意代码篡改文件、窃取数据等严重安全风险。建议用Docker容器做沙箱隔离,或者用restrictedpython这类库限制代码权限,只开放必要操作。

二、两类题型的具体处理方案

1. 基于控制台输出(print语句)的题型

核心思路是捕获代码执行时的标准输出,和预设的预期结果对比:

  • 实现步骤:
    • 重定向Python的sys.stdout,把print的内容存到缓冲区
    • 执行用户代码
    • 把捕获到的输出做格式处理(比如去掉多余换行、空格),再和预期输出(支持多组测试用例)对比
  • 服务器端核心逻辑示例:
import sys
from io import StringIO

def verify_print_code(user_code, expected_outputs):
    old_stdout = sys.stdout
    captured_output = StringIO()
    sys.stdout = captured_output
    
    try:
        exec(user_code)
        actual_output = captured_output.getvalue().strip()
        # 支持多组预期结果,比如不同测试用例的输出集合
        return actual_output in expected_outputs
    except Exception:
        # 代码语法错、运行错直接判定失败
        return False
    finally:
        sys.stdout = old_stdout

2. 基于函数输出(return语句)的题型

这类需要用户代码包含指定名称的函数,执行时调用该函数传入测试参数,对比返回值:

  • 实现步骤:
    • 提前定义测试用例:包含输入参数和对应预期返回值
    • 执行用户代码,将函数加载到独立命名空间
    • 遍历测试用例调用函数,逐一对比返回值
  • 服务器端核心逻辑示例:
def verify_function_code(user_code, test_cases, required_func_name):
    # 用独立命名空间避免污染全局环境
    code_namespace = {}
    try:
        exec(user_code, code_namespace)
        # 检查用户是否实现了要求的函数
        if required_func_name not in code_namespace:
            return False
        target_func = code_namespace[required_func_name]
        # 遍历所有测试用例验证
        for input_args, expected_result in test_cases:
            actual_result = target_func(*input_args)
            # 注意浮点数精度、数据类型的严格匹配
            if actual_result != expected_result:
                return False
        return True
    except Exception:
        # 代码执行或函数调用出错均判定失败
        return False
  • 注意:题目必须明确告知用户要实现的函数名、参数列表,比如“请实现calculate_average(scores)函数,接收数字列表参数,返回平均值”。

三、额外注意事项

  • 超时处理:给代码执行设置超时时间,防止死循环代码占用服务器资源。
  • 输入处理:如果需要用户处理输入,控制台题型可重定向sys.stdin注入测试输入;函数题型直接通过参数传输入数据,更可控。
  • 错误反馈:捕获语法错误、运行时错误等,返回具体错误信息帮用户调试。

内容的提问来源于stack exchange,提问作者Andy Tam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 01:57:19