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模块)相关推荐

  1. 少说话多写代码之Python学习002——环境搭建

    一.安装包安装 本机为windows所以主要介绍windows下的环境搭建, for windows的python安装包下载地址: http://www.python.org/download/ 按照 ...

  2. 少说话多写代码之Python学习034——其他语句01(pass,del)

    pass语句 pass就是什么都不做,和C#中的一个分号语句很像. 一般用作占位符,比如,这种情况,就是什么都不处理. name=input('请输入姓名') if len(name)<3:pr ...

  3. 少说话多写代码之Python学习066——python程序打包01 编译安装

    程序开发完成后,我们需要部署给用户使用,一般我们都会将其打包.比如大家在使用windows系统时,安装QQ.微信.除IE外的各种浏览器.看视频软件.word等,都会先下载一个安装包,一般是都是一个EX ...

  4. 少说话多写代码之Python学习009——字典的创建

    字段是Python中唯一内建的映射类型.字典中的值并没有特殊的顺序,但是都储存在一个特定的键下,键可以是数字,字符串甚至是元组.而对于我们常见的列表则是数据挨个存放. 比如某些情况下,我们使用字典会比 ...

  5. 少说话多写代码之Python学习008——字符串的方法02

    #!/usr/bin/python #_*_coding:UTF-8 _*_# split方法 str='喜,怒,忧,思,悲,恐,惊' stringArray=str.split(',') print ...

  6. 少说话多写代码之Python学习017——字典的方法(items、pop)

    items方法将字典的所有项以列表方式返回,列表中每一项都表示为(键,值)对形式,但对字典的项的次序没有什么规律. #items方法 d={'title':'绕口令:喇嘛和哑巴','content': ...

  7. 少说话多写代码之Python学习010——字典的简单使用

    Python中字典的基本操作有这些方法, len(d)返回d中项的数量: d[k]返回关联到键k的值: d[k]=v将值v关联到键k上 del d[k]删除键为k的项 k in d  检查d中是否含有 ...

  8. 少说话多写代码之Python学习016——get方法练习

    前面看了get的基本使用,我们再使用get进行练习,做一个建议的数据库查询功能. 代码如下, 初始化people对象,我们当作一个简易数据库使用.通过数据的参数打印出指定的值. people ={'刘 ...

  9. 少说话多写代码之Python学习032——循环语句02(如何迭代-排序和反转)

    引入两个函数,排序和反转,它们作用于序列上,并不修改原序列的值,只是返回排序后或反转后的值. 下面看看具体的使用, 对序列排序,可以根据指定条件升序和降序排序.具体函数使用可自行查询. s=[23,1 ...

最新文章

  1. 取消打开命令行进入默认anaconda的环境
  2. Linux centos7 VMware Apache访问日志不记录静态文件、访问日志切割、静态元素过期时间...
  3. tls jdk_使用JDK 13查看TLS配置
  4. 前端学习(1156):let var const的区别
  5. 现代软件工程 第十四章 【质量保障】 练习与讨论
  6. 判别模型、生成模型与朴素贝叶斯方法
  7. CUDA:使用nvprof工具计时
  8. Java String到int,Java int到String
  9. arcview、arcinfo、arceditor的区别
  10. PHP: ThinkPHP获取客户端IP地址
  11. Docker端口映射后,外机访问不了的问题
  12. 喉咙肿痛症状似流感 常州一男子延误治疗险送命
  13. Android开发笔记(一百八十六)管理SQLite的利器——应用检查器App Inspection
  14. Android基于安卓手机个人理财系统
  15. ES term terms 查询
  16. C# lazy懒加载
  17. setTimeout原理
  18. 【C#】软件注册和认证
  19. element日历组件只显示月和日,把年份隐藏掉
  20. 创业早期,如何高效“找钱”?

热门文章

  1. 无需下载就能使用的图像编辑器?能代替 Photoshop 吗?#Photopea
  2. 在逆境中仍然倔强成长
  3. 咕咕机vs喵喵机测评
  4. win10家庭版如何开启远程操控/远程协助?
  5. 搜狗输入法用户体验分析
  6. java折木棍_蓝桥杯算法训练 Sticks(木棍)问题(JAVA)
  7. 2020腾讯阅文集团-前端笔试题
  8. 关于AQS中enq( )方法CAS操作的疑惑
  9. Java 3d 三维图形库使用
  10. 微信运动刷步实践教程