使用python生成信息学奥赛题目测试数据

  python由于没有精度的限制(可以说是不存在高精的说法),所以可以方便快速的生成题目要求范围内的随机测试数据。而且不需要太深入的了解python的语法。

1.所使用到的模块

import random

  注:random是python自带模块,它可以用来随机生成数据,不需要下载。

2.random模块中包含的主要函数函数

import random

print( random.random() )             #在[0,1)范围内随机生成的一个实数
print( random.randint(1,10) )        # 产生 1 到 10 的一个随机整数  
print( random.random() )             # 产生 0 到 1 之间的随机浮点数
print( random.uniform(1.1,5.4) )     # 产生  1.1 到 5.4 之间的随机浮点数,区间可以不是整数
print( random.choice('tomorrow') )   # 从序列中随机选取一个元素
print( random.randrange(1,100,2) )   # 生成从1到100的间隔为2的随机整数(随机的奇数)

a=[1,3,5,6,7]
random.shuffle(a)                    # 将序列a中的元素顺序打乱
print(a)
对应的随机的一组结果如下:
0.418181846080815
10
0.016338410499876943
5.102477330276011
o
91
[5, 7, 3, 6, 1]

3.搭配python文件的打开关闭(详见链接)

①文件的打开

fileobject = open(file_name [, access_mode][, buffering])

  可能对于新手来说上面这条语句有点难。其实我们成信息学奥赛题目测试数据,一般只会用到前两个参数;
  1. 第一个参数是要打开指定文件的文件名,文件默认目录是和py文件同文件夹下;如果文件不存在,就会在与py文件同文件夹下新建一个文件
  2. 第二个参数是指打开文件后进行的操作。生成随机数据是往文件里面写数据,所以一般这个参数是“w”,其他操作详见链接。
  如下所示,打开一个名叫test.in的文件,对其进行写的操作。

# 打开一个文件
fp = open("test.in", "w")#这里的"fp"是一个文件对象,相当于一个变量,名字任意

②文件的写操作

  打开一个文件之后,就开始生成随机数据了,有了刚才random的基础,在加上python的循环语句,就可以生成随机数据了,写操作的语法如下:

fileObject.write(string)

  调用文件对象的write函数,往文件里字符串string。

注意:由于文件的写操作是对字符串进行写操作,所以当你生成了随机数之后,你要把这些随机数使用强制类型转换函数str(int)转换成字符串之后,再进行写操作。

③文件的关闭

  当一个文件对象的引用被重新指定给另一个文件时,Python 会关闭之前的文件。用 close()方法关闭文件是一个很好的习惯。

fileObject.close()

4.实例

  完成了以上内容的学习之后,已经基本上掌握了随机数据生成的流程与方法,下面给一个实例:

import random  
fp = open("test1.in", 'w')#打开文件
for j in range(1,101):#题目要求输入有多组数据,我这里生成100组
    c=random.randint(1,1001)#岛屿的数量c-1
    fp.write(str(c-1)+" "+str(random.randint(99900,100000))+"\n")#对生成的随机数,转换成字符串之后再写
    for i in range(1,c):  
        a = random.randint(-100000,100000)#横坐标的范围
        b = random.randint(0,100000)#纵坐标的范围
        fp.write(str(a)+" "+str(b)+"\n")
    fp.write("\n")#每组数据之间有一个换行
fp.write("0 0\n")#输入"0 0"表示结束输入 
fp.close();#关闭文件 

5.得出输出数据

  使用题目的标准程序来得出输出数据,使用方法如下:

int main()
{
    //freopen("test1.in","r",stdin);//文件的输入,读操作"r"
    //freopen("test1.out","w",stdout);//文件的输出,写操作"w"
    ......
}

  在你的题目对应的标准c++程序中的main()函数的开头,加上文件的输入输出语句,就能够在与c++程序相同目录下生成所对应的输出数据。

  注意:头文件为#include#include,所对应的输入输出就是scanf()和printf()cin和cout。输入的文件就是刚才我们使用python所生成的文件。

有任何疑问可以在下方评论或者私信我,(●’◡’●)。

你可能感兴趣的:(python)