快速了解 OJ 判题系统如何在python中使用?

2022-09-26 14:32:52 浏览数 (4)

OJ 简介

Online Judge,翻译成中文,即在线评判系统,简称OJ。简单的说:OJ就是一个网上做编程题的系统,你可以根据人家给的题目编程,提交之后系统会判断你做的对不对。

判题原理

首先提前准备测试数据与答案。然后传入测试数据给提交的代码,如果得到的答案与我们给定的一致,就认为代码正确。

比如下面这题:

如果你直接打印aaabbbccc,肯定是通不过的,后面可能还有很多其它的测试数据:

代码语言:javascript复制
111
222
333

代码语言:javascript复制
abc
123
456

其实自己也可以做一个简单的判断系统,比如学生给你提交很多代码作业,你可以自动让程序去判断。

单个学生作业:

判断代码:

更多学生只需要来个批量操作即可。

所以OJ是看结果不看过程的(一般的oj系统都有时间和空间限制的,如果很低效的解决方法,是通不过的。)

Python3如何在OJ获取输入数据

很多人第一次使用OJ系统,还是很不适应的,一直错误,主要是不知道如何获取输入的数据。

输入数据模式常见的有三种。

模式一

本模式适用于固定 n 行,每行一个数据,数据类型无所谓。该模式的典型题目如下图。

如上图所示,一共三行,每行一个字符串。因此,我们可以利用 input() 这个函数来获取输入,基本方法如下:

代码语言:javascript复制
# 获取三行测试数据
a = input()
b = input()
c = input()

模式二

本模式适用于只有一行输入,在这行输入中有若干个数据,每个数据用空格或者其他字符隔开。如下图所示:

因此,我们可以利用 input() 这个函数来获取输入,然后再使用 split分隔。如下:

代码语言:javascript复制
>>> a,b,c = map(int, input().split()) # 获取测试数据并处理成数字
3 4 55
>>> print(a,b,c)
3 4 55

模式三

本模式适用于有若干行输入。对于每行多少个数据,我们再分别套用模式一或者模式二即可。如下图所示:

由于第一行是行数,所以可以先将行数记录,然后循环即可。

代码语言:javascript复制
a = int(input()) # 获取测试数据的行数
l = []
# 循环获取输入的测试数字
for i in range(a):
    b = int(input())
    l.append(b)
print(l)

还有一些系统的题目比较特殊,也是有若干行输入,但是输入数据没有指定几行,由于我们不知道到底有几行,只能通过读到 EOF 的时候确认输入结束。因此我们可以使用死循环读取模式来解决这个问题。如下所示:

代码语言:javascript复制
while True:
    try:
        x = int(input())
    except:
        break


(全文完)

1 人点赞