我需要个python自动评卷的代码
时间: 2023-12-28 08:03:57 浏览: 24
好的,我可以帮你提供一个简单的 Python 自动评卷的代码。
首先,你需要准备好一些测试用例和参考答案,将它们存储在一个文件中。例如,假设你有一个名为 `testcases.txt` 的文件,其中包含了多个测试用例和参考答案,格式如下:
```
Test case 1:
Input: 2 3
Output: 6
Test case 2:
Input: 5 10
Output: 50
...
```
接下来,你可以使用 Python 的文件读取操作来读取这个文件,然后逐个测试每个用例并计算得分。具体实现如下:
```python
def run_testcase(input_str, expected_output_str, student_output_str):
# 将输入字符串转换为参数
input_params = tuple(map(int, input_str.strip().split()))
# 将期望输出字符串转换为数字
expected_output = int(expected_output_str.strip())
# 将学生输出字符串转换为数字
student_output = int(student_output_str.strip())
# 判断学生输出是否正确
if student_output == expected_output:
return 1.0
else:
return 0.0
def grade_testcases(testcases_file, student_func):
total_score = 0.0
num_testcases = 0
with open(testcases_file, 'r') as f:
lines = f.readlines()
i = 0
while i < len(lines):
# 读取测试用例和参考答案
input_str = ''
expected_output_str = ''
while i < len(lines) and not lines[i].startswith('Test case'):
if lines[i].startswith('Input:'):
input_str = lines[i][len('Input:'):].strip()
elif lines[i].startswith('Output:'):
expected_output_str = lines[i][len('Output:'):].strip()
i += 1
# 跳过空行
i += 1
# 运行学生代码并获取输出
try:
student_output_str = student_func(input_str)
except Exception as e:
student_output_str = str(e)
# 计算得分
score = run_testcase(input_str, expected_output_str, student_output_str)
# 更新总分和测试用例数
total_score += score
num_testcases += 1
# 计算平均分
if num_testcases > 0:
average_score = total_score / num_testcases
return average_score
else:
return 0.0
```
在上面的代码中,`run_testcase()` 函数用于运行单个测试用例并计算得分,`grade_testcases()` 函数用于读取测试用例文件并逐个运行测试用例。
你需要将你想要测试的学生代码作为一个参数传递给 `grade_testcases()` 函数,并确保学生代码的输入和输出格式与测试用例文件中的格式一致。
最后,你可以调用 `grade_testcases()` 函数来计算学生代码的得分。得分将基于测试用例的正确性和数量进行计算。