内容正文:
2.2随机抽取问题
高中信息技术/教科版/选择性必修1
目录
1.情境导入
2.体验探究
3.编程实现
4.课堂小结
1.情境导入
趣味知识竞赛活动,不仅有奖杯,还有随机抽取幸运观众并随机抽题答题赢礼物的环节哦!
学习目标
本节围绕“趣味知识竞赛”项目展开,通过项目活动了解随机抽取问题,学习利用线性表解决随机抽取问题,体会数据结构在解决问题中的作用和意义。本节主要包含“体验随机抽取”和“编程实现随机抽取”两个任务。
2.新课讲授
知识竞赛活动中抽取幸运观众的环节,就是在参加活动的现场观众中随机抽取一定数量的人作为幸运观众,可以通过抽取观众的编号或者抽取观众的姓名来实现。本任务中,我们通过抽取观众的编号来实现。
抽取规则如下: ①幸运观众数量少于观众总数量; ②被抽中的观众编号不再参加此后的抽取活动。
任务一 体验随机抽取 活动1随机抽取幸运观众
填一填
任务一 体验随机抽取 活动1随机抽取幸运观众
假设现场有200名观众,观众的编号范围是1~200,需要从中随机抽取10名幸运观众,抽取过程如下:
第1次抽取,在200名观众中随机抽取1名幸运观众,如果抽到了180号,那么180号就不能出现在下一次的抽取过程中;
第2次抽取,在199名观众中随机抽取1名幸运观众,如果抽到了88号,那么88号就不能出现在下一次的抽取过程中;
第3次抽取,在 名观众中随机抽取;
以此类推,最后一次抽取,是在 名观众中随机抽取。
198
191
任务一 体验随机抽取 活动2随机抽取竞赛题
知识竞赛中随机抽取题目环节的规则如下:①题目数量和参赛选手数量相同;②抽中的题目不再放回,后面的选手在剩下的题目中随机抽取。题目的初始状态如图所示。
题A
题B
题C
题D
题E
题F
题G
题H
题I
题J
1 2 3 4 5 6 7 8 9 10
任务一 体验随机抽取 活动2随机抽取竞赛题
第1次抽取:假设第1名选手通过摇号的方式在1~10号码中摇到了3号,那么第3题“题C”被抽中并从预抽取题目中删除。第1次抽取后,剩下9道题可供其他选手抽取,抽取后的状态如下图所示。
题A
题B
题D
题E
题F
题G
题H
题I
题J
1 2 3 4 5 6 7 8 9
任务一 体验随机抽取 活动2随机抽取竞赛题
第2次抽取:假设第2名选手通过摇号的方式在1~9号码中摇到了6号,那么第6题“题G”被抽中并从预抽取题目中删除。第2次抽取后,剩下8道题可供其他选手抽取,抽取后的状态如图所示。
题A
题B
题D
题E
题F
题H
题I
题J
1 2 3 4 5 6 7 8
任务一 体验随机抽取 活动2随机抽取竞赛题
第3次抽取:假设第3名选手通过摇号的方式在1~8号码中摇到了8号,那么第8题“题J”被抽中并从预抽取题目中删除。第3次抽取后剩下7道题可供其他选手抽取,抽取后的状态如图所示。
题A
题B
题D
题E
题F
题H
题I
1 2 3 4 5 6 7
任务一 体验随机抽取 活动2随机抽取竞赛题
假设后面的2位选手依次抽取了第1题、第5题,请按照上面的思路画出每次抽取后的状态。
题B
题D
题E
题F
题H
题I
1 2 3 4 5 6
画一画
题B
题D
题E
题F
题I
1 2 3 4 5
如果按照上述规则抽题,第6为选手抽题时的摇号范围是1~5.
随机抽取
随机抽取是指在一个有限数量的数据集范围内,随机选择其中的某个数据元素的过程。
我们重点学习的是无放回的随机抽取,其基本原则是:上一次抽中的数据元素,不能出现在下一次的抽取过程中。
3.编程实现
任务二 编程实现随机抽取 活动1 建立数据结构
填一填
经过观察分析,在任务一的活动中通过每次抽取位置来获取幸运观众和竞赛题目,因此可以利用线性表来组织数据。
创建线性表对象stulist和contestlist,分别存放观众编号和竞赛题目。请补全下面的代码。
01. import random #导人random库
02. from linearList import LinearList #导人线性表
03.stulist= #创建线性表对象,存放观众编号
04. contestlist= #创建线性表对象,存放竞赛题目
LinearList( )
LinearList( )
任务二 编程实现随机抽取 活动2 设计算法
假设需要从m位观众中随机抽取n位幸运观众,由他们来抽取n道题目,根据知识竞赛随机抽取幸运观众和题目的规则,实现随机抽取的算法描述如下。
(1) 需要进行n次抽取,抽取的步骤如(2) (3) (4) 所示,如果未完成则继续抽取。
(2) 根据可抽取观众总人数生成一个随机数,根据这个随机数抽取幸运观众编号,删除被抽中的观众编号
(3)根据可抽取题目总数生成一个随机数,根据这个随机数抽
(4)显示抽取结果
任务二 编程实现随机抽取 活动2 设计算法
根据上述算法,定义随机抽取函数randSelect(stulist,contestlist)参数stulist表示待抽取的观众编号,contestlist表示待抽取的题目。请补全下面的代码。
05.#随机抽取函数
06.def randSelect(stulist,contestlist):
07.n=contestlist.size( ) #确定抽取次数
08.for i in range(n):
09.#生成随机数确定观众编号位置
10.randstu=random.randrange(stulist.size())
任务二 编程实现随机抽取 活动2 设计算法
根据上述算法,定义随机抽取函数randSelect(stulist,contestlist)参数stulist表示待抽取的观众编号,contestlist表示待抽取的题目。请补全下面的代码。
05.#随机抽取函数
06.def randSelect(stulist,contestlist):
07.n=contestlist.size( ) #确定抽取次数
08.for i in range(n):
09.#生成随机数确定观众编号位置
10.randstu=random.randrange(stulist.size( ))
任务二 编程实现随机抽取 活动2 设计算法
填一填
11.stunum=stulist.getItem( ) #获取观众编号
12.stulist.removeItem(randstu) #删除抽中的观众编号
13.#生成随机数确定题目位置
14.randtest=random.randrange(contestlist.size())
15.testnum=contestlist.getItem(randtest) #获取题目
16.contestlist.removeItem( )#删除抽中的题目
17.#显示抽取结果
18.print("第",stunum,"号观众抽取的题目为:",testnum)
randstu
randtest
任务二 编程实现随机抽取 活动3 编程实现
填一填
假设参加本次知识竞赛活动的观众人数是200人,观众的编号是1~200,随机抽取的题目是以下10个关键词所指定的题目: 唐诗、互联网、微信、雾霾、人工智能、二维码、虚拟现实、3D打印、物联网、网络爬虫。请补全下面的代码。
19. for i in range(1,201):
20.stulist.appendItem(_ ) #将观众编号存入线性表中
21.contestlist.appendItem("唐诗") #将题目存入线性表中
22.contestlist.appendItem("互联") #将题目存人线性表中
23.contestlist.appendItem("微信") #将题目存入线性表中
i
任务二 编程实现随机抽取 活动3 编程实现
填一填
24.contestlist.appendItem( )#将题目存入线性表中
.25. contestlist.appendItem( )#将题目存入线性表中
26. contestlist.appendItem( )#将题目存入线性表中
27. contestlist.appendItem( )#将题目存入线性表中
28.contestlist.appendItem( )#将题目存入线性表中
29. contestlist.appendItem( )#将题目存入线性表中
31. randSelect( , ) #调用随机抽取函数
“人工智能”
“二维码”
“虚拟现实”
“3D打印”
“物联网”
“网络爬虫”
stulist
contestlist
将上述代码输入到一个文件中,运行该程序,显示随机抽取的幸运观众编号和题目。
4.课堂小结
本节学习了随机抽取的基本概念,以及利用线性表解决随机抽取问题的方法,通过利用线性表解决趣味知识竞赛随机抽取的问题,初步体会了数据结构在解决问题中的作用和意义!
请同学们认真完成教材中的拓展练习哦!
下节课见!
$$