当前课程知识点:Python 交互式程序设计导论 >  第1周 >  A 课程视频(函数) >  随机函数

返回《Python 交互式程序设计导论》慕课在线视频课程列表

随机函数在线视频

随机函数

下一节:逻辑值和比较

返回《Python 交互式程序设计导论》慕课在线视频列表

随机函数课程教案、知识点、字幕

今天我们要关注的一个问题是随机函数

随机是个非常有意思的问题

在现实生活中 随机问题实际上是很常见的

举个简单的例子

咱们中国福利彩票开奖就是个非常典型的随机过程

在程序设计过程当中实际上很多问题都需要用到随机函数

下面呢我们就开始今天的内容

在程序设计中某些应用场景需要程序的行为具有不可预测性

在这里呢 我举了两个经典的游戏的例子

左侧这个是著名的俄罗斯方块

这个方块呢从界面的正上方进入界面

但是你不能预知我得到的是哪一组图形

右侧的这个呢是切水果的这样的游戏

从界面的下方抛出各种各样的水果

随机抛出炸弹

那么这些也是不可预测的它也具有随机性

计算机生成随机事件的思想主要变现为随机数

换句话说计算机要想实现真正的随机性是通过产生随机数来完成的

那么自然而然就有一个问题需要我们思考

计算机是有固定的计算规则和运行模式

那在这中条件下

可以产生真正的不可预知的结果吗

可以产生真正的随机数么

答案是否定的

实际上现有的计算机的这种运行规则固定

和固定的运行模式是不可能产生真正的随机数的

那么我们把计算机产生的随机数称之为伪随机数

原因就在此

所谓的伪随机数

就是假的随机数

同学们可能会问为什么这种假的随机数

我们还拿来当成真的随机数来用呢

实际上伪随机数他也满足两个条件

第一从统计的观点来看它们是随机的

第二用户事先很难预知这个结果

满足这两个条件也就是说它满足了一定的随机性

我们就可以把它当成一种随机数来使用

在Python当中提供了很多产生随机数的函数

我们把它称之为随机函数

那么在这张表当中我列出来了

常用的有5个

左边是函数的使用的一个方法

右边是函数的功能说明

这些函数呢我们在pycharm的开发环境当中会给大家做详细的介绍

在这呢我们先简单的浏览一下

第一个函数random.random()

这个函数呢产生的是0至1.0之间的随机数

注意我在这是0.0至1.0的随机数

也就意味着它产生的一个实数

或者是一个浮点数

而且是小于1的大于0的

那么注意不包括1.0

也就是不包括右边界

看到这同学们会问

为什么这个函数的名字前面有个rondom.然后才是函数名呢

大家注意这个函数是包含在random这个软件包当中或者这个库当中

所以我们调用这个函数的时候需要把它的库名也带上

那么再看第二个例子

第二个函数呢叫Random.randint(start,stop)

产生一个随机整数

int是整数的意思

那么它依然前面要加一个random这个包文件的名字

这个.大家可以理解为“的”

就是random这个包底下的randint这个函数

这个函数有两个参数

一个是start 一个是stop

start和stop顾名思义一个是起始 一个是终止

这个函数的功能是生成start到stop之间的随机整数

包括stop 也就是说左右边界都包括

假设我要产生一个1到3的这样一个随机整数

我就可以把start设置为1把stop设置为3

1 2 3都有可能 而且是等概率的

第三个函数呢 是random.randrange()

这个含义呢在一定范围内产生一个随机数

它有3个参数分别是start stop 和step

这个start和stop的含义呢跟上面这个函数是一样的

这是起始位置和终止位置

这个 step是步长

什么意思

实际上它是生成在start和stop之间的

以step为步长的随机整数

比如说我生成start1到stop10之间的

step为2的随机整数

那么它就可以生成 1 3 5 7 9

它步长是2

步长也就是说间隔是2

那么常用的方法呢大概有这样3种

一种是random.randrange(stop)加一个参数stop

第二种random.randrange(start,stop)

第三种random.randrange(start,stop,step)

三个参数

这些用法呢我在这先不详细讲解

我们一会在pycharm实际开发环境当中给大家讲解

第四个函数呢 是choice

choice 英文意思是选择的意思

那么random这个包底下的choice函数几个参数

一个(a_seq)这个函数很特殊

它并不是一个数

它是一个list 它是一个列表

它的含义是 返回一个非空序列a_seq的随机元素

也就是说你给它一个非空的序列

它可以返回这个序列当中的某一个元素

这个我也会具体举例给大家说

最后一个呢 叫random.shuffle(a_list)

当然这个参数名字是随意取的

那么这个函数的意思是

随机排列列表a_list中的元素

也就是把这个列表当中的元素乱序 打乱它的顺序

这些函数呢我们随后在pycharm当中给大家逐一讲解

下面一个有意思的问题 也是非常重要的问题

我想跟大家讨论一下 随机种子

什么叫随机种子

这是一个很有意思的问题

那么计算机产生随机数呢 是这样一个机理

计算机会为一个产生随机数的算法

我们把它称为随机函数

随机种子作为一个输入值

输入到这个输入函数当中

经过一个复杂的数学上的运算模型

计算得出一个随机数

那么随机种子 我们在前面的函数当中

并没有显示的或者说明显的明确的设置

这个时候计算机会自动默认为系统时间

同学们请注意 如果以系统时间为随机种子

输入这个随机函数 产生的随机数

这样一个过程 大家可以想一下

系统时间是每分每秒的在发生变化

换句话说 随机种子是每一刻都在发生变化

这就决定它有条件有方法可以生成随机数

也就是说随机种子是在变化的

那么能不能人为指定这个随机种子呢

是可以的

通过random这个包底下的seed这个函数

可以指定随机种子

换句话说 人如果直接指定这个随机种子

也就确定了生成随机数的初始条件

通过一个固定的算法它得到的随机数 也是确定的

好 下面呢我们在pycharm环境当中给大家做讲解和演示

在pycharm中

我们将对课件中提到的5个随机函数进行逐一的讲解和示范

除此之外呢 我们还要研究seed这个随机种子函数的使用

它对随机数的产生究竟有什么样的影响

这个我们要在课程当中进行分析

在讲解这些随机函数之前

首先我们要导入随机函数的模块random 导入的方法呢

是通过 import random导入

导入之后 这些函数就可以正常使用

好 我们先来讲解第一个函数random

首先呢

我们定义一个变量 x =random这个模块底下的random这个函数

然后用print语句对它进行输出

好 运行一下

大家看控制台的输出是0.69等等

再运行一下

好 实际上 从这个例子上

我们可以看出 random这个函数

它返回的是0到1之间的一个随机实数

但是不包括1.0这个右边界

这点非常重要

实际上我们在使用random这个函数呢

可能更常见的一种方法或者一种使用方式是这样

我们希望得到一个区间的随机实数

比如说我们希望得到5至10之间

这个区间段之内的一个随机函数

利用random这个函数怎么实现呢

非常简单

我们可以定义一个y等于用random这个函数乘以区间的长度

长度是多少怎么算

10减5 这是区间的长度

然后再加上这个区间的左边界5

这个表达式看起来挺复杂的

实际上呢 很好理解

我们要取5到10之间的一个随机实数

首先我们要以左边界为基准 这是毫无疑问的

然后取区间的长度乘以一个小于1的随机实数

得到的就是5到10的一个随机实数

我们来输出一下 验证一下

我们把上面两句话注释一下

这样会很明确 这个结果

运行一下5.41几几

8.29几几

那么第二种方式实际上是我们更常用的一种方法

好 这是random这个函数

下面呢 我们要研究randint这个函数

randint从它这个函数名上我们就可以看出

它是随机产生一个整数

何以见得呢 int就是整型数据类型的这样一个缩写

这个函数有两个参数

一个是start一个是stop

这两个参数 一个表示左边界 一个表示右边界

一个是起点 一个是终点

举个例子 我们还是定义一个x

random模块名字加randint

好 然后给它两个参数

一个参数是1 一个参数是5

打印输出 好 运行一下

4 1 5 2 5 3 2

1 2 3 4 5都取到了

那么这个randint是什么意思呢

就是从start开始 到stop截至

在这个区间段内 取随机整数那么包括右边界5

刚才大家可以看到我们已经取到5了实际上

它是包括右边界 这点非常重要

请大家留意一下

好 这是第二个函数

下面呢 我们来看一下第三个函数

randrange这是一个范围区间的意思

这个函数猛地看上去 是有点复杂 因为它有三个参数

但实际上

如果前面2个函数你都已经搞明白的话这个函数也非常好理解

它的基本用法 有3种

分别赋予它1个参数2个参数和3个参数

我们首先来看1个参数的情况

把这两个语句注释掉

我们还是定义一个x=random.randrange()

给它一个参数 给它一个3

输出 好 运行一下 显示的结果是2

再运行一下0 2 1 好

实际上randrange()这个函数如果你给它一个参数

这个参数对应的是start stop step里面的第二个参数stop

也就是右边界

那么这句话的意思是

x取值是从0到3之间的一个随机整数

默认的左边界是0

如果你只有一个参数

它认为这是stop 就是右边界 默认的左边界是0

所以0到3的

注意它不能取右边界

所以呢

如果这个参数给的是3它只能取0、1、2

跟刚才咱们多次运行结果是吻合的

好 这是一种用法

那么还一种用法是两个参数

我再给它一个参数

比如说1 好 给个1

那么两个参数分别对应的是 start和stop

它表示是从1 到3这个区间中产生一个随机数

不包括右边界3

我们来执一下2 1 1 2

它只能取 1 和2

因为左边界是1 2

3又不能取 所以只能取1 和2

这是两个参数 分别对应的是start和stop

下一种应用情况相对要复杂一点 是3个参数

假设我们把第二个参数改成10

第三个参数我们给成2

运行一下1 5 3 9 5 1

好 实际上同学们应该能够理解

random.randrange() 三个参数是什么意思

1对应的是start 10对应的是stop 2对应的是step

这个表示的是步长或者叫间隔

它的含义是以1为左边界 以2为间隔 以10为终点取随机整数

那么大家想一想从1开始 取到10结束

步长是2或者说间隔是2

只可能取1 3 5 7 9这五个数

为了能够更加说明问题

我把这个10呢改小一点 使得它的区间变短

比如说我设置为5

好 那大家可以想一下

以5为终点 1为起点 步长为2

(能取到的数)那就是1 3 取不到5 因为不能包括右边界

所以我们运行一下 看一下结果

1 3 3 好 大家看 它只能取1和3 取不到5

这就是random.randrange(start,stop,step)

那么对这个函数来讲 大家一定要注意一点

无论这三种任何一种用法

它都不可能取到右边界 这点需要注意

我们把这个注释一下 我们来讲下一个

下一个函数choice(a_seq)

choice(a_seq)呢是从一个非空的序列里面随机选择一个元素

那么有些同学会问 什么叫非空序列呢

非空序列呢有很多种 在Python中

我们最常用的就是字符串 之前同学们也接触过

所以我们就以字符串为例 给大家做一个演示

我定义一个变量s等于字符串a b c d

那么我们再定义一个变量c用random.choice(s) 参数为s

这句话的意思呢就是从s这个字符串当中

随机选择一个元素把它赋给c

然后我们把c输出一下

好 运行一下 是c 再运行一下 d 再运行一下 b

那么很明显

我们是从这个abcd这个字符串当中随机选取了一个元素

这个字符串就是我们所谓的非空序列

当然 除了字符串以外 还有没有别的 也有

比如说我们后面要学到的列表

因为同学们还没有接触过这个概念

我们在这就以字符串为例

好 下面呢 我们来讲最后一个函数shuffle(a_list)

shuffle(a_list)的含义呢

是对一个列表进行重新排序或者打乱它的顺序

这个怎么去用呢 我们来看看 先举一个例子

定义一个s等于 首先定义一个列表

我定义a b c

然后我用random.shuffle(s) 给它一个参数s

然后用print输出语句对s进行输出

好 运行一下 大家可以看到

s本来是a b c这个顺序

用shuffle()这个函数呢对它进行重新排序或者打乱顺序

它显示的结果是b c a 我们再来运行一下

b a c b c a c a b

那么这个呢就有点像我们在打扑克的时候洗牌的过程

实际上呢就是把这个列表进行乱序的过程

那么最后呢我们来研究下seed()这个函数

前面在课件当中提到过

seed()是用来设置随机种子的

我们在前面五个函数的讲解过程当中

同学们发现我们并没有人为的来设计随机种子

系统会自动以系统时间作为种子

输入到这个随机函数的这个算法当中返回一个随机数

所以看上去我们返回的这个数据是随机

那么如果我们人为的指定随机种子

上述的这些随机函数呢返回的结果就是固定的

举个例子

random.seed()如果我把这个随机种子写固定就是1

好 然后我们再定义一个变量让它产生一个随机整数

random.randint()我们用int这个函数来生成一个随机整数

比如说我们从1取到5

好 然后呢 我们来输出x 运行一下

它返回的结果是2

前面的这个我们把它注释掉

再运行一下 还是2 它会一直固定为2

因为固定的随机种子 固定的随机函数的生成算法

产生的一定是一样的 或者是一致的随机数

那么我们把这句话注释掉

好 这个时候呢随机种子又变成了系统时间

所以这个x呢又会发生变化

2 再看 5 4 会发生变化

好 总结一下

今天呢我们主要介绍了随机函数

那么随机函数在我们的程序开发当中

或者游戏开发当中 是非常常用的一类函数

那么给大家介绍了什么叫伪随机数 为什么会有这样一个称呼

另外又介绍了seed()这个随机种子的概念

那么这些函数在大家今后的程序开发过程当中

会经常用到

好 今天的课就讲到这里

Python 交互式程序设计导论课程列表:

第0周

-课程简介

--课程简介

-A 课程视频(算数操作符及表达式)

--绪论

--Python交互式解释器使用方法

--PyCharm集成开发环境介绍

--算数操作符及表达式

-B 课程视频(变量及赋值)

--变量

--项目提交

--“我喜欢Python”热身小项目

-C 辅助视频(计算机结构、Python开发环境安装)

--Windows平台安装Python开发环境

--Mac平台安装Python开发环境

-D 辅助视频(如何提交项目)

--项目提交

-第0周--小测验

-本周项目:"我喜欢Python"

--项目发布、完成、提交及评分流程

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

--项目提交

第1周

-A 课程视频(函数)

--函数

--其它操作符

--随机函数

-B 课程视频(逻辑及表达式)

--逻辑值和比较

--条件

--编程技巧

--“老虎杠子鸡虫”游戏

-第1周--小测验

-本周项目:“老虎杠子鸡虫”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第2周

-A 课程视频(Python交互式应用)

--事件驱动编程

--事件可视化跟踪执行

--SimpleGUITk

--按钮

-B 课程视频(输入框、全局变量)

--输入框

--局部变量和全局变量

--编程技巧

--“猫咪藏在哪个房间”游戏

-第2周--小测验A

-第2周--小测验B

-本周项目:猫咪藏在哪个房间

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第3周

-A 课程视频(画布绘图)

--画布和图形绘制

--字符串处理

--绘图和计时器可视化跟踪执行

--图片和音效

-B 课程视频(计时器)

--计时器

--交互式绘图

--“神奇时钟”游戏

--编程技巧

-第3周--小测验A

-第3周--小测验B

-本周项目:“神奇时钟”

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第4周

-A 课程视频(列表)

--列表

--键盘输入

--列表及变化可视化跟踪执行

--碰撞和反射

-B 课程视频(键盘控制)

--速度控制

--运动

--编程技巧

--“桌上冰球”游戏

-第4周--小测验A

-第4周--小测验B

-本周项目:“桌上冰球”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第5周

-A 课程视频(鼠标输入、列表进阶)

--鼠标输入

--Video

--Video

--Video

-B 课程视频(字典和图片)

--Video

--Video

--Video

--Video

-第5周--小测验A

-第5周--小测验B

-本周项目:“世界杯八强连连看”

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第6周

-A 课程视频(类)

--面向对象编程(类和对象入门)

--面向对象编程(类和对象进阶)

--对象可视化跟踪执行

--华容道中的类

-B 课程视频(平铺图片)

--平铺图片

--理解对象

--编程技巧

--“华容道”游戏

-第6周--小测验A

-第6周--小测验B

-本周项目:“华容道”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第7周

-A 课程视频(类进阶及文件操作)

--集合

--文件操作

--文字块类

--处理停止的文字块

-B 课程视频(游戏状态控制)

--游戏记分规则

--游戏结束的条件及处理

--编程技巧

--“决战三字经”游戏

-第7周--小测验A

-第7周--小测验B

-本周项目:决战三字经

--游戏说明

--程序说明

--编程步骤

--评分标准

--项目模板

第8周

-A、课程视屏(精灵集合)

--Video

--精灵类

--战士类

--编程技巧

-B、课程视屏(动画)

--精灵碰撞

--精灵动画

--编程技巧

--保卫家园游戏

-第8周--小测验

-本周项目:守卫家园

--游戏说明

--程序说明

--编程步骤

--评分标准

--项目模板

随机函数笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。