内容简介:random主要是产生随机数。不过实际上,不论哪种语言中所谓的随机数,其实都不是真正意义的随机数。random中的SystemRandom可以让数据接近真正的随机数。我们通过下面的例子来看看随机数的使用。我们在一段时间内产生随机时间。
random主要是产生随机数。不过实际上,不论哪种语言中所谓的随机数,其实都不是真正意义的随机数。random中的SystemRandom可以让数据接近真正的随机数。
我们通过下面的例子来看看随机数的使用。
我们在一段时间内产生随机时间。
from random import * from time import * #随机时间 date1 = (2018,1,1,0,0,0,-1,-1,-1) time1 = mktime(date1) date2 = (2019,1,1,0,0,0,-1,-1,-1) time2 = mktime(date2) randomtime = uniform(time1,time2) print(randomtime) print(asctime(localtime(randomtime))) 输出 1515458794.747572 Tue Jan 9 08:46:34 2018
这里表示在2018年1月1日到2019年1月1日均匀产生随机日期。
下面我们再看一个掷骰子的游戏,
#掷骰子 from random import randrange inputnum = input('几个骰子?') inputsides = input('每个骰子的面数?') sum=0 num = int(inputnum) sides = int(inputsides) for i in range(num): sum += randrange(sides)+1 print('结果是',sum) 输出 几个骰子?3 每个骰子的边数?6 结果是 5
再来看看读取文件,比如我们有一篇《正气歌》,随机读取一句出来。
我们将正气歌,按照每句一行的方式存在一个txt文件中:fortuneTest.txt。欣赏下正气歌正文:
天地有正气,杂然赋流形。 下则为河岳,上则为日星。 于人曰浩然,沛乎塞苍冥。 皇路当清夷,含和吐明庭。 时穷节乃见,一一垂丹青。 在齐太史简,在晋董狐笔。 在秦张良椎,在汉苏武节。 为严将军头,为嵇侍中血。 为张睢阳齿,为颜常山舌。 或为辽东帽,清操厉冰雪。 或为出师表,鬼神泣壮烈。 或为渡江楫,慷慨吞胡羯。 或为击贼笏,逆竖头破裂。 是气所磅礴,凛烈万古存。 当其贯日月,生死安足论。 地维赖以立,天柱赖以尊。 三纲实系命,道义为之根。 嗟予遘阳九,隶也实不力。 楚囚缨其冠,传车送穷北。 鼎镬甘如饴,求之不可得。 阴房阗鬼火,春院閟天黑。 牛骥同一皂,鸡栖凤凰食。 一朝蒙雾露,分作沟中瘠。 如此再寒暑,百沴自辟易。 嗟哉沮洳场,为我安乐国。 岂有他缪巧,阴阳不能贼。 顾此耿耿在,仰视浮云白。 悠悠我心悲,苍天曷有极。 哲人日已远,典刑在夙昔。 风檐展书读,古道照颜色。
#随机读取文件 # 用命令执行 #代码见fortune.py #命令行执行见文章描述
读取文件的代码如下,在fortune.py中,
import fileinput,random #中文内容会报异常 #fortunes=list(fileinput.input()) fortunes=list(fileinput.input(openhook=fileinput.hook_encoded('utf-8'))) print(random.choice(fortunes))
这里需要注意,因为我们的txt文件内容是中文,如果使用fileinput.input()读取,会报:
UnicodeDecodeError: 'gbk' codec can't decode byte...
这个异常,为了防止这个异常,我们需要按照上文增加指定编码格式读取。执行过程和结果如下,
最后我们再看一个发牌的例子,我们希望每次发的牌不相同。
#发牌 values = list(range(1,11)) + 'J Q K'.split() suits = '方块 梅花 红心 黑桃'.split() deck=['%s %s' % (s,v) for v in values for s in suits] from pprint import pprint pprint(deck[:12])
输出
['方块 1', '梅花 1', '红心 1', '黑桃 1', '方块 2', '梅花 2', '红心 2', '黑桃 2', '方块 3', '梅花 3', '红心 3', '黑桃 3']
这样的牌随机性还不太好,我们需要优化下。
print('优化后的翻牌:') from random import shuffle shuffle(deck) pprint(deck[:12])
输出
优化后的翻牌: ['方块 9', '方块 Q', '方块 3', '黑桃 4', '梅花 2', '方块 6', '梅花 10', '梅花 7', '黑桃 2', '黑桃 J', '方块 4', '黑桃 Q']
上面只打印了12张牌,我们打印出整副牌。
print('一副牌:') pprint(deck[:54])
输出
一副牌: ['梅花 1', '黑桃 5', '梅花 3', '黑桃 10', '梅花 Q', '梅花 10', '方块 2', '红心 8', '黑桃 K', '梅花 8', '梅花 5', '红心 10', '方块 K', '红心 5', '黑桃 7', '红心 9', '黑桃 3', '红心 K', '红心 2', '梅花 J', '红心 J', '黑桃 J', '方块 10', '黑桃 2', '红心 7', '方块 J', '黑桃 6', '红心 3', '方块 7', '梅花 7', '方块 3', '红心 6', '梅花 6', '黑桃 9', '方块 Q', '黑桃 4', '方块 9', '方块 1', '红心 Q', '方块 6', '黑桃 8', '黑桃 Q', '方块 4', '红心 4', '红心 1', '梅花 K', '黑桃 1', '方块 8', '梅花 4', '梅花 2', '方块 5', '梅花 9']
工程文件下载: https://download.csdn.net/download/yysyangyangyangshan/10854666
以上所述就是小编给大家介绍的《少说话多写代码之Python学习062——标准模块(random模块)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 少说话多写代码之Python学习056——标准模块(自定义模块)
- 少说话多写代码之Python学习061——标准模块(time模块)
- 少说话多写代码之Python学习063——标准模块(shelve模块)
- 少说话多写代码之Python学习065——标准模块(re模块)
- 少说话多写代码之Python学习057——标准模块(看看一些系统模块)
- 少说话多写代码之Python学习021——导入模块
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。