使用python生成信息学奥赛题目测试数据
python由于没有精度的限制(可以说是不存在高精的说法),所以可以方便快速的生成题目要求范围内的随机测试数据。而且不需要太深入的了解python的语法。
1.所使用到的模块
import random
注:random是python自带模块,它可以用来随机生成数据,不需要下载。
2.random模块中包含的主要函数函数
import randomprint( 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-1fp.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<cstdio>
或#include<iostream>
,所对应的输入输出就是scanf()和printf()
或cin和cout
。输入的文件就是刚才我们使用python所生成的文件。
有任何疑问可以在下方评论或者私信我,(●’◡’●)。
使用python生成信息学奥赛题目测试数据相关推荐
- python做信息学奥赛(csp-j)
信息学奥赛官网:信息学奥赛一本通(C++版)在线评测系统 注意:这个网站只能看题,不能提交python代码. 第一部分 基础知识 第一节 语言入门 1004:字符三角形 题目描述:给定一个字符,用它构 ...
- python是信息学奥赛的前置课吗
NOI全国青少年信息学奥林匹克竞赛 NOI全国青少年信息学奥林匹克竞赛 NOI Linux 2.0发布,将于9月1日起正式启用! NOI Linux 2.0发布,将于9月1日起正式启用! 关于NOI系 ...
- C++信息学奥赛题目归类:2007-2018初赛普及组单项选择题
每个题前的()里的数字代表了年份 我把选择题分成了三部分,第一部分的参考性不大,可以适当做做,第二部分的知识理论题的出题频率相对较高,希望针对相应的知识点进行讲解和至少一次的练习,第三部分是相对比较难 ...
- C++信息学奥赛题目归类:2007-2018年初赛普及组问题求解
2007 题目一 (子集划分)将n个数(1,2,-,n)划分成r个子集.每个数都恰好属于一个子集,任何两个不同的子集没有共同的数,也没有空集.将不同划分方法的总数记为S(n,r).例如,S(4,2)= ...
- C++信息学奥赛题目归类:初赛普及组阅读程序写结果题
NOIP阅读程序写结果题 初赛阅读程序写结果部分(共4题,每题8分,共计32分.) 注重培养学生的数学运算和归纳能力 这类题型主要是读程序写结果. 其中前两题为简单题,应该是必得分,第三题属于中等题, ...
- 1267 老鼠的旅行 2012年CCC加拿大高中生信息学奥赛
1267 老鼠的旅行 2012年CCC加拿大高中生信息学奥赛 题目描述 Description You are a mouse that lives in a cage in a large lab ...
- python能参加奥赛吗-家长们注意了!关于信息学奥赛(NOIP),你需要知道这些...
原标题:家长们注意了!关于信息学奥赛(NOIP),你需要知道这些 导读:获得全国青少年信息学奥林匹克联赛(NOIP)一等奖的应届高中毕业生,均具有保送进入高校就读的资格.部分地区一等奖获奖选手还享有高 ...
- python生成测试数据_Python基于Hypothesis测试库生成测试数据
Hypothesis是Python的一个高级测试库.它允许编写测试用例时参数化,然后生成使测试失败的简单易懂的测试数据.可以用更少的工作在代码中发现更多的bug. 安装 pip install hyp ...
- 1000:入门测试题目 【信息学奥赛一本通(C++版)在线评测系统】
为了更好的阅读体验,建议您移步至我的博客园来阅读此文章. 传送门 「原题」 1000:入门测试题目 时间限制: 1000 ms 内存限制: 32768 KB 提交数: 0 通过数: 0 [题目描述] ...
最新文章
- 最新版IntelliJ IDEA 15开发Java Maven项目
- linux制作共享服务器,Linux如何制作一个简单的共享服务器
- How to create a site with AJAX enabled in MVC framework.
- hdu2102 水搜索
- 快速排序及优化(Java实现)
- 2017年我国SAP行业三大利好
- mysql创建唯一索引_mysql创建唯一索引
- spring mvc 传中文 到controller层乱码的 解决方法
- 请写一个java程序实现线程连接池功能_请写一个java程序实现线程连接池功能
- 解决系统性能问题:线程增加导致堆增加
- 数据结构(C语言版 第2版严蔚敏版)完整课后习题答案汇总
- python下载百度文库文档_Python百度文库爬虫之txt文件
- 【破解】百度网盘不限速(亲测可用)
- 路由器的介绍和基本原理
- samba报错“Failed to open /etc/secrets.tdb”
- 5410 ACM 杭电 01+完全背包
- 人工智能——归结推理
- 二进制bit0是什么意思_阜平吧在讨论5G的问题,感觉挺有意思,科普下……
- 什么是坐标系,不同坐标系之间有什么区别
- 2018年网上最靠谱的正规赚钱思路