Skip to main content
edited tags; deleted 52 characters in body
Source Link
200_success
  • 145.7k
  • 22
  • 191
  • 481

Usage of the code is $python [test01.py[,test02 , ...] answer.dat grade.md it

$ python [test01.py[,test02 , ...] answer.dat grade.md

It will wrotewrite grades  (range 0~100) to a file called grade.md.

Any suggestion or feedbacks are welcome. Thank you :)

Usage of the code is $python [test01.py[,test02 , ...] answer.dat grade.md it will wrote grades(range 0~100) to a file called grade.md.

Any suggestion or feedbacks are welcome. Thank you :)

Usage of the code is

$ python [test01.py[,test02 , ...] answer.dat grade.md

It will write grades  (range 0~100) to a file called grade.md.

Source Link
kidkkr
  • 347
  • 2
  • 8

Run multiple python codes and Check with answer data

I wrote the code for my undergraduate TA jobs, to check assignment codes of students in Python class are correct or not.

Usage of the code is $python [test01.py[,test02 , ...] answer.dat grade.md it will wrote grades(range 0~100) to a file called grade.md.

Any suggestion or feedbacks are welcome. Thank you :)

"""
Testing Assginments
by kidkkr
03-16-2017
"""

import os
import sys
from difflib import SequenceMatcher

class ResultChecker:
    """ Check python code result with answer data """
    __slots__ = '_srcFiles', '_ansFile', '_gradeFile', '_grade', '_ans'

    def __init__(self, srcFiles, ansFile, gradeFile):
        self._srcFiles = srcFiles 
        self._ansFile = ansFile 
        self._ans = open(self._ansFile, 'r').read()
        self._gradeFile = gradeFile
        self._grade = "# Grade File\n"

    def _run_code(self, src):
        print('-----------running ' + src + '..-----------')
        os.system('python ' + src + ' > result.swp')
        res = open('./result.swp', 'r').read()
        ratio = int(SequenceMatcher(None, res, self._ans).ratio() * 100)
        self._grade += src + ' ' + str(ratio) + '\n'
        print('result: ' + str(ratio))

    def check(self):
        for src in self._srcFiles:
            self._run_code(src)
        open(self._gradeFile, 'w').write(self._grade) # Write _grade to a file
        print('Checking has completed.')
        print(self._gradeFile + ":")
        print(self._grade)


def __main__():
    if len(sys.argv) < 2: # Check arguments
        raise ValueError('')

    srcFiles = sys.argv[1:-2]
    ansFile = sys.argv[-2]
    gradeFile = sys.argv[-1]

    ResultChecker(srcFiles, ansFile, gradeFile).check()


if __name__ == '__main__':
    __main__()