JudgeResult篇
(一)思路:
将用户程序执行过后生成的main.out文件与标准答案ans.out文件中的字符串取出进行简单的匹配比较即可得出相应的结果,思路较为简单。
唯一要注意的一个点是:代码中有个replace('\r','')方法,它的作用就是将\r替换成空字符串。为什么要做这个替换呢?因为在windows下,文本的换行是"\r\n",而在Linux下是"\n"。因为不能确定测试数据来源与windows还是Linux,增加一个\r,就是增加一个字符,如果不删除的话,两个文本就是不一样的,就会造成wrong answer结果。或许你曾经遇到过在windows下用记事本打开一个纯文本文件,格式全乱了,所有文本都在一行内,非常影响阅读。你可以通过用写字板打开来解决这个问题。据说"\r\n"来源于比较古老的打印机,每打印完一行,都要先“回车(\r)”,再“换行”(\n)。同样一个C语言的printf("\n")函数,在windows下将生成"\r\n",而在Linux下生成"\n",因为评测程序为你自动处理了,因此你就不必关注这些细节的东西了。
(二)代码:
import os
def judge_result():
'''对输出数据进行评测'''
currect_result = os.path.join("./ans.out")
user_result = os.path.join("./main.out")
try:
curr = open(currect_result).read().replace('\r','').rstrip()#删除\r,删除行末的空格和换行
print(curr)
user = open(user_result).read().replace('\r','').rstrip() #python2中使用file函数
print(user)
except:
return False
if curr == user: #完全相同:AC
return "Accepted"
if curr.split() == user.split(): #除去空格,tab,换行相同:PE
return "Presentation Error"
if curr in user: #输出多了
return "Output limit"
return "Wrong Answer" #其他WA
if __name__ == '__main__':
print(judge_result())
(三)运行结果:
(四)代码详解:
user = open(user_result).read().replace('\r','').rstrip() #python2中使用file函数
open("文件路径"):打开该路径下的文件
read( ):表示读取全部内容
replace(old,new):将old字符串替换为新的字符串
rstrip():去掉字符串中的空格