在PHP中解析类似代码的数据

时间:2018-03-28 17:40:38

标签: php json

我有以下PHP代码,它使用某些给定的代码创建一个python文件,使用一些测试用例执行它,并根据它传递的测试用例数对代码进行分级。请注意,每个代码示例都是一个python函数,用于一些简单的计算。

<?php

if ($_POST["request_type"] === "release_grades") {
    $_POST["request_type"] = "get_answers";
    $answers = json_decode(very_simple_post_curl($back_address), TRUE);
    $_POST["request_type"] = "get_quiz";
    $questions = json_decode(very_simple_post_curl($back_address), TRUE);
    foreach ($answers as $index => $answer) {
        $answers[$index]["testcases"] = array();
        $answers[$index]["constraints"] = array();

        $data_original = $answer["AnswerText"];
        $question = $questions[$answer["TestQuestionID"]];

        $func_name = $question["QuestionFuncName"];
        $testcases = $question["testcases"];

        $answers[$index]["grade"] = $max_unscaled_grade = count($question["testcases"]);

        foreach ($testcases as $key => $value) {
            $data = $data_original . "\nprint(" . $func_name . $value["QuestionTestcaseArgs"] . ")";
            $fh = file_put_contents('test.py', $data);
            if ($fh === false)
                die();
            $output = trim(shell_exec("python test.py"));
            if ($output === $value["QuestionTestcaseReturn"]) {
                $answers[$index]["testcases"][$value["QuestionTestcaseID"]] = "PASSED";
            } else {
                $answers[$index]["testcases"][$value["QuestionTestcaseID"]] = "FAILED";
                $answers[$index]["grade"] --;
            }
        }
        $answers[$index]["grade"] /= $max_unscaled_grade;
        $answers[$index]["grade"] *= intval($question["TestQuestionPoints"]);
    }
}

哪些迭代将一些执行的Python代码的结果与以下json中提取的测试用例进行比较:

{"1":{"QuestionID":"1","QuestionDifficulty":"medium","QuestionText":"Write a function \"fibonacci\" that takes 1 integer parameter, n, which computes the fibonacci value for n.","QuestionFuncName":"fibonacci","testcases":[{"QuestionTestcaseID":"1","QuestionID":"1","QuestionTestcaseArgs":"(10, 10)","QuestionTestcaseReturn":"20"},{"QuestionTestcaseID":"2","QuestionID":"1","QuestionTestcaseArgs":"(3, 1)","QuestionTestcaseReturn":"4"},{"QuestionTestcaseID":"5","QuestionID":"1","QuestionTestcaseArgs":"(5)","QuestionTestcaseReturn":"5"},{"QuestionTestcaseID":"6","QuestionID":"1","QuestionTestcaseArgs":"(10)","QuestionTestcaseReturn":"55"}],"constraints":[{"QuestionConstraintID":"1","QuestionID":"1","QuestionConstraint":""}]}

但是,我还为每个执行的代码输入都有一个函数名,在进行测试用例评分之前,我想查看函数名是否对齐,并相应地修改等级。我如何从$data收集函数名称,以便将其与$func_name进行比较?

编辑: $data看起来像:

def add(a, b):
    return a+b

0 个答案:

没有答案