内容正文:
任务4.5 集合
调查问卷中随机调查对象的确定
4.5 集合——调查问卷中随机调查对象的确定
【任务描述】
导师想做一项问卷调查,需随机抽取学生完成调查,小T辅助导师一起开展这项工作。为了实验的客观性,小T在2000名同学中随机抽取500名同学完成这项调查,他想先通过计算机程序生成n个(n为进行调查问卷的人数,人数少于2000人)1到2000之间的随机整数,要求抽取同学的序号不能重复。然后再把这些数从大到小排序,按照排好的顺序去找对应学号的同学来填写调查问卷。
4.5 集合——调查问卷中随机调查对象的确定
调查对象的抽取
5000号中随机抽800
不能重复
集合
4.5 集合——调查问卷中随机调查对象的确定
【任务分析】
数据类型中存储的元素不能相同,可以利用Python中的集合来解决,编程思路如下:
(1)输入需进行问卷调查的人数。
(2)循环产生随机数,并加入到随机数集合中。
(3)判断随机数集合中的元素个数是否达到需进行问卷调查的人数。若已达到,则跳出循环。
(4)对随机数集合中的元素进行排序并输出,确认随机数个数是否达到需要进行问卷调查的人数。
4.5 集合——调查问卷中随机调查对象的确定
4.5.1 集合的基本操作:创建、运算
4.5.2 集合的常用方法:添加、删除
4.5.3 集合任务实现——调查问卷中随机调查对象的确定
4.5.2 集合的常用方法
4.5.2 集合的常用方法
集合元素的添加
集合元素的删除
1.集合元素的添加——add、update
(1)set.add(x):返回添加了x元素的集合。
add()方法用于给集合添加单个元素,如果添加的元素在集合中已存在,则不执行添加操作。
4.5.2 集合的常用方法
【例4-62】使用add()添加集合元素。
setName={'李白','杜甫','王维','苏轼'}
setName.add('李清照')
print(setName)
{'李清照', '王维', '苏轼', '杜甫', '李白'}
4.5.2 集合的常用方法
(2)set.update({x,...}):返回添加了多个元素{x,...}的集合。
使用update()方法可以批量增加集合中的元素,当然如果添加的新元素在集合中存已在,则该元素只会出现一次。
4.5.2 集合的常用方法
4.5.2 集合的常用方法
setName={'李白','杜甫','王维','苏轼'}
setName.update({'李清照', '李白', '陆游'})
print(setName)
{'杜甫', '王维', '苏轼', '李白', '李清照', '陆游'}
【例4-63】使用update()添加集合元素。
2.集合元素的删除remove、discard、pop、clear
(1)删除集合中指定的元素,可以用remove()、dicard()方法来实现。这两种方法的区别如下:
s.remove(x)表示从集合s中删除x,若x不存在,则会引发KeyError错误。
s.discard(x)表示从集合s中删除x,若x不存在,则不会出现错误。
4.5.2 集合的常用方法
4.5.2 集合的常用方法
setName={'李白','杜甫','王维','苏轼'}
setName.remove('苏轼')
print(setName)
setName.discard('李白')
print(setName)
setName.discard('苏轼')
print(setName)
setName.remove('李白')
print(setName)
{'杜甫', '李白', '王维'}
{'杜甫', '王维'}
{'杜甫', '王维'}
Traceback (most recent call last):
File "D:\源代码\3.5.2集合的常用方法.py", line 19,
in <module>
setName.remove('李白')
KeyError: '李白'
【例4-64】集合元素的删除1。
(2)使用pop()和clear()方法可以清除集合中的元素,
s.pop()删除集合中的任意一个元素
s.clear()删除集合中的所有元素
4.5.2 集合的常用方法
4.5.2 集合的常用方法
{'王维', '李白', '苏轼'}
set()
setName={'李白','杜甫','王维','苏轼'}
setName.pop() #删除集合中任意随机元素
print(setName)
setName.clear() #空集合
print(setName)
【例4-64】集合元素的删除1。
4.5.2 集合的常用方法
边学边练:
有两个集合,set1={‘排球’,‘足球’,‘乒乓球’,’羽毛球’},set2={‘游泳’,‘健身’,’跑步’,’乒乓球’,‘羽毛球’,},请进行以下操作:
(1)在set1中加入篮球、网球、冰球三个元素;往set2中加入“健美操”元素;
(2)删除set2中乒乓球、羽毛球元素;
(3)清除set1中所有元素。
4.5.3 集合任务实现——调查问卷中随机调查对象的确定
4.5.3 集合任务实现——调查问卷中随机调查对象的确定
【任务描述】
导师想做一项问卷调查,需随机抽取学生完成调查,小T辅助导师一起开展这项工作。为了实验的客观性,小T在2000名同学中随机抽取500名同学完成这项调查,他想先通过计算机程序生成n个(n为进行调查问卷的人数,人数少于2000人)1到2000之间的随机整数,要求抽取同学的序号不能重复。然后再把这些数从大到小排序,按照排好的顺序去找对应学号的同学来填写调查问卷。
4.5.3 集合任务实现——调查问卷中随机调查对象的确定
调查对象的抽取:
学生总人数为2000人
随机抽取n人(n<2000)
如何产生随机数?
如何确认人数?
4.5.3 集合任务实现——调查问卷中随机调查对象的确定
【任务分析】
小T欲协助导师完成问卷调查工作,他首先需要随机抽取调查对象。在2000人中随机抽取不重复的n人(因篇幅限制,现抽取60人),编程思路如下:
(1)输入需进行问卷调查的人数。
(2)循环产生一个随机数,并加入到随机数集合中。
(3)判断随机数集合中的元素个数是否达到需进行问卷调查的人数。若已达到,则跳出循环。
(4)对随机数集合中的元素进行排序并输出,确认随机数个数是否达到需进行问卷调查的人数。
(3)循环产生随机数,并加入到随机数集合中;判断集合中元素个数是否达到调查问卷人数,若已达到,则跳出循环
4.5.3 集合任务实现——调查问卷中随机调查对象的确定
输入需进行调查问卷的人数
按序号排序输出
是否已循环2000次
产生随机数,加入到集合中
Y
定义空集合,存储
N
(1)输入需进行调查问卷的人数
(2)定义空集合,存储调查对象序号
(4)对集合中的元素进行排序并输出
是否已满足问卷人数
循环中断break
N
Y
4.5.3 集合任务实现——调查问卷中随机调查对象的确定
import random
n = eval(input('请输入您要进行调查问卷的人数:')) #输出需进行调查问卷的人数
【例4-66】调查问卷中随机调查对象的确定。
(1)输入需进行调查问卷的人数
4.5.3 集合任务实现——调查问卷中随机调查对象的确定
s=set([]) #定义空集合s,存储随机产生的数值
(2)定义空集合,存储调查对象序号
4.5.3 集合任务实现——调查问卷中随机调查对象的确定
(3)循环产生随机数,并加入到随机数集合中;判断集合中元素个数是否达到调查问卷人数,若已达到,则跳出循环
for i in range(3000):
num=random.randint(1,2001) # 产生1~2000之间的随机数
s.add(num) # 将产生的随机数加入到集合中
if(len(s))>=n: # 判断集合中元素个数,如果超出人数,就跳出for循环
break
补充知识:
random.randint(low,high)随机产生一个正整数,该函数返回[low,high)
的一个正整数。
4.5.3 集合任务实现——调查问卷中随机调查对象的确定
print('产生随机数次数为%d个。'%i) #输出集合
print('去重后随机数集合:',s) #输出集合
print('去重后随机数排序后的列表:',sorted(s)) #将集合中元素进行从小到大排序,集合将转换成列表
print('去重后的元素个数为%d' %len(s)) #输出排序后产生随机数的列表元素个数
(4)对集合中的元素进行排序并输出
4.5.3 集合任务实现——调查问卷中随机调查对象的确定
请输入您要进行调查问卷的人数:60
产生随机数次数为61次
随机数集合: {637, 1670, 1799, 390, 265, 1930, 908, 1299, 152, 536, 1947, 1405, 287, 1957, 1574, 37, 1069, 1456, 305, 52, 1333, 1588, 951, 1082, 1723, 1724, 1210, 956, 1345, 1089, 835, 580, 1477, 1097, 843, 1227, 77, 1614, 79, 717, 1873, 978, 908,1494, 215, 985, 1886, 991, 1120, 1249, 1380, 1007, 1904, 1009, 753, 1647, 630, 1014, 1656, 381, 1278}
去重后随机数排序后的列表: [37, 52, 77, 79, 152, 215, 265, 287, 305, 381, 390, 536, 580, 630, 637, 717, 753, 835, 843, 908, 951, 956, 978, 985, 991, 1007, 1009, 1014, 1069, 1082, 1089, 1097, 1120, 1210, 1227, 1249, 1278, 1299, 1333, 1345, 1380, 1405, 1456, 1477, 1494, 1574, 1588, 1614, 1647, 1656, 1670, 1723, 1724, 1799, 1873, 1886, 1904, 1930, 1947, 1957]
去重后的元素个数为60
运行结果
$$