资源简介
非选择题专项(三)
二、非选择题(本大题共3小题,其中第13题8分,第14题9分,第15题9分,共26分)
13.某红木加工厂为了防止粉尘爆炸,在木料车间搭建了粉尘监测系统。该系统示意图如图 a 所示,网络应用软件的实现架构是 B/S 架构。粉尘爆炸有三个条件:一是有火源,二是氧气浓度达到 21% ,三是粉尘浓度不能超过 20~60g/m3 。请回答下列问题:
图a
(1)用户要查询该系统的实时数据,可以通过________查询。(单选,填字母:A.客户端 APP/ B.客户端浏览器)
(2)关于该系统中数据的传输,下列说法正确的是________。(多选,填字母) (注:全部选对得2分,选对但不全的得1分,不选或有选错的得0分)
A.只能由传感器到智能终端 B.只能由智能终端到服务器
C.只能由执行器到智能终端 D.可以由客户端到服务器,也可以由服务器到客户端
(3)在车间不同位置安装了10个粉尘传感器,用于找出最易发生粉尘爆炸的位置。现编写程序,找出10个传感器每小时(0~23时)粉尘浓度最大值出现的次数,并输出次数最多的传感器编号。若同一时段出现多个相同的最大值,则输出最先出现的编号。
部分Python程序代码如下,输出界面如图b所示,请在划线处填入合适的代码。
sensor=[″s1″,″s2″,″s3″,″s4″,″s5″,″s6″,″s7″,″s8″,″s9″,″s10″] #传感器的编号
dis= [[16,22, … … ,8],[ 10,25, … … ,25], … … ,[9, 14, … … , 14]]
#dis 中存储 10 个传感器每小时的粉尘浓度数据,分别是 dis[0]—dis[9] 。如 dis[0]中的 [ 16,22, … … ,8],分别是传感器s1在第 0 、1 、2… …23时采集到的粉尘浓度值。
ds_count=[0]* 10 #存储每个传感器最大值出现的次数
for i in range(0,24):
max1=p1=0
for j in range(0, 10):
if dis[j][i]>max1:
max1=dis[j][i]
p1=①
ds_count[p1]+= 1
print(″ 10 个传感器最大值出现的次数为″,ds_count)
max2=p2=0
for i in range(0, 10):
if ds_count[i]>max2:
max2=ds_count[i]
p2=i
print(″次数最多的是″,② ,″粉尘传感器。″)
(4)最易发生粉尘爆炸的位置找到后,需在此增加一个执行器,用于防止粉尘爆炸,写出 该执行器的名称及实现的功能______________________________________。
14.某校高三首考后,汇总了学生7选3成绩以及次考科目弃考情况(注意:1表示次考弃考,0表示参加次考),ckqk.xlsx文件部分数据如图a所示,现要统计各班人均弃科目考门数和各科次考弃考比例,编写如下Python程序。
图a
请回答下列问题:
(1)下列代码读取ckqk.xlsx文件,输出各班每人平均弃考门数,输出格式如图b所示,则划线处应填写的代码为________。(单选,填字母)
A.groupby('班级').弃考门数.mean()
B.groupby('班级',as index=False)['弃考门数'].mean()
import pandas as pd
df = pd.read_excel('ckqk.xlsx')
df['弃考门数']=df[['弃考科目1','弃考科目2','弃考科目3']].sum(axis=1)
dfg=df.________________
print(dfg)
(2)统计7选3每门科目选考人数和弃考人数,并计算各科目弃考比例,Python程序如下,请在划线处填写合适的代码。
courses ={}
for i in df.index:
for k in range(1, 4):
subject =df.at[i,'科目%d'%k]
if ① :
courses[subject]=[1,0] #[1,0]表示当前为本科目第1个人,弃考人数初值置0
else:
courses[subject][0]+=1
abandon=df.at[i,'弃考科目%d'%k]
if abandon==1:
②
dfs = pd.DataFrame(courses)
dfs = dfs.T
dfs = dfs.rename(columns={0:'总人数',1:'弃考人数'})
dfs['弃考比例']=round(dfs['弃考人数']/dfs['总人数']*100, 1)
dfs =dfs.sort_values('弃考比例', ascending=False)
(3)编写代码绘制如图c所示图表,则7先3科目中次考弃考比例超30%的有 ① 门。为实现该功能,请在下面划线处填入合适代码。
图c
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.figure('chart',figsize=(6,4))
plt.title('各科次考弃考比例分析')
plt.bar(dfs.index,② , label='弃考比例')
plt.ylabel('各科弃考百分比')
plt.xlabel('7选3科目'); plt.legend(); plt.show()
15.小阳的创意工坊,每天都会接到很多订单,且每个订单花费一个单位时间。其中order列表中存储每个订单的截止时间和利润。假设他的工作是从0时刻开始算,订单能在截止时间内(包括截止时间)完成,就会获得利润。他可以选择完成当前时间之后的任意一个订单,过了截止时间的订单就会自动取消。
(1)为了获得较高利润,小阳想到按时间优先的方式来完成订单。为此定义tsort(lst)函数,其中参数lst的每个元素包括截止时间和利润。函数的功能是根据订单截止时间升序排列。
def tsort(lst):
n=len(lst)
for i in range(n-1):
for j in range(n-i-1):
if lst[j][0]>lst[j+1][0]:
return lst
调用该函数,若 lst=[[2,4],[1,4],[1,2],[3,5],[2,3],[3,6]],虚线框中的程序段执行次数为 。
(2)小阳发现按时间优先设计的算法,获得的利润并不是最大的。在截止时间进行排序后的订单基础上对算法重新设计:依次对每个订单进行处理,确保每个截止时间要完成的订单利润为当前订单队列和所有未超时订单中利润最高。部分python程序段如下,
请在划线处填入合适的代码。
order=[[2,5],[1,4],[1,3],[3,1],[3,2],[2,6]]
n=len(order)
ans=0 #ans 存放最大利润之和
que=[[] for i in range(n)] #利润优先订单队列
head=tail=0
order=tsort(order)
def enque(tmp,tail,head): #数组模拟优先队列入队
p=tail
que[tail]=tmp
tail+=1
for i in range(tail-1,head,-1):
if que[i-1][1]>tmp[1]:
que[i]=que[i-1]
①
que[p]=tmp
return tail
for i in range(n):
if ② :
tail=enque(order[i],tail,head)
ans+=order[i][1]
else:
if order[i][1]>que[head][1]:
③
head+=1
tail=enque(order[i],tail,head)
ans+=order[i][1]
print(″利润最大为″+str(ans))
(3)小阳接到订单 order=[[2,5],[1,4],[1,3],[3,1],[3,2],[2,6]],输出结果为 。
非选择题专项(三)
13.(1)B (2)AD (3)①j ②sensor[p2] (4)参考1:风扇,功能:当粉尘浓度过高时,打开风扇,吹散粉尘参考2:蜂鸣器,功能:当粉尘浓度值高时,发出警告(2分)(评分标准:写的执行器和功能要一一对应;写出多项就以第一项为准;只写出执行器给1分,只写出功能不给分。)
解析 (1)B/S 架构通过浏览器查询实时数据。(2)A选项传感器只是采集数据,数据从传感器到智能终端。B选项智能终端和服务器直接数据双向传输。C选项数据是从智能终端到执行器。D选项服务器接受客户端请求数据,同时传输相应数据到客户端。(3)①由语句ds_count[p1]+=1可得变量p1保存最大值的下标j。
②变量p2对应的传感器名称sensor[p2]。(4)略。
14.(1)B (2)①subject not in courses或not subject in courses ②course[subject][1] += 1
(3)①5 ②dfs[″弃考比例″]
解析 (1)根据图b,分组方法gorupby的相应参数as_index=False。(2)①字典courses每对键值对的结构是:″科目″:[选科人数, 弃考人数],先判断字典中是否存在相应的键,不存在,就要创建相应的键值对。 ② 如果某同学某科目有弃考,则要对应科目弃考人数累加:course[subject][1] += 1。(3)①略。 ② 根据图C, 柱状图的数据分别是dfs.index, dfs.[″弃考比例″]。
15.(1)3 (2)①p=i-1 ②order[i][0]>tail-head ③ans-= que[head][1] (3)利润最大为13
解析 (1)加框处语句为冒泡排序中数组的交换次数,程序实现升序排列,只需找到数据中的逆序对。[2,4]和[1,4],[1,2]是逆序对,[3,5]和[2,3]是逆序对。(2)①实现在有序的队列que中插入新数据订单tmp,从后往前遍历,若大于tmp[1]的元素,则将其后移一位que[i]=que[i-1],同时更新变量p的值。②将没有超时的订单入队,并计算队列中所有订单的总利润。③在当前订单和已经入队的定单中删除一个利润最小的订单。若当前订单的利润大于队首订单的利润(队首订单利润最低),删除队首订单(出队处理),然后将当前订单入队并插入到合适的位置,从而保证利润总和最大。而ans已经存储了之前入队的订单利润和,因此当删除队首订单时,需要减去原队首订单利润,并加上当前入队订单利润。(3)利润最大为5+6+2。(共19张PPT)
非选择题专项(三)
第四部分 考前题型特训
二、非选择题(本大题共3小题,其中第13题8分,第14题9分,第15题9分,共26分)
13.某红木加工厂为了防止粉尘爆炸,在木料车间搭建了粉尘监测系统。该系统示意图如图 a 所示,网络应用软件的实现架构是 B/S 架构。粉尘爆炸有三个条件:一是有火源,二是氧气浓度达到 21% ,三是粉尘浓度不能超过 20~60g/m3 。请回答下列问题:
图a
(1)用户要查询该系统的实时数据,可以通过 查询。(单选,填字母:A.客户端 APP/ B.客户端浏览器)
(2)关于该系统中数据的传输,下列说法正确的是 。(多选,填字母) (注:全部选对得2分,选对但不全的得1分,不选或有选错的得0分)
A.只能由传感器到智能终端
B.只能由智能终端到服务器
C.只能由执行器到智能终端
D.可以由客户端到服务器,也可以由服务器到客户端
(3)在车间不同位置安装了10个粉尘传感器,用于找出最易发生粉尘爆炸的位置。现编写程序,找出10个传感器每小时(0~23时)粉尘浓度最大值出现的次数,并输出次数最多的传感器编号。若同一时段出现多个相同的最大值,则输出最先出现的编号。
部分Python程序代码如下,输出界面如图b所示,请在划线处填入合适的代码。
(4)最易发生粉尘爆炸的位置找到后,需在此增加一个执行器,用于防止粉尘爆炸,写出 该执行器的名称及实现的功能______________________________________。
答案 (1)B (2)AD (3)①j ②sensor[p2] (4)参考1:风扇,功能:当粉尘浓度过高时,打开风扇,吹散粉尘参考2:蜂鸣器,功能:当粉尘浓度值高时,发出警告(2分)(评分标准:写的执行器和功能要一一对应;写出多项就以第一项为准;只写出执行器给1分,只写出功能不给分。)
解析 (1)B/S 架构通过浏览器查询实时数据。(2)A选项传感器只是采集数据,数据从传感器到智能终端。B选项智能终端和服务器直接数据双向传输。C选项数据是从智能终端到执行器。D选项服务器接受客户端请求数据,同时传输相应数据到客户端。(3)①由语句ds_count[p1]+=1可得变量p1保存最大值的下标j。②变量p2对应的传感器名称sensor[p2]。(4)略。
14.某校高三首考后,汇总了学生7选3成绩以及次考科目弃考情况(注意:1表示次考弃考,0表示参加次考),ckqk.xlsx文件部分数据如图a所示,现要统计各班人均弃科目考门数和各科次考弃考比例,编写如下Python程序。
图a
请回答下列问题:
(1)下列代码读取ckqk.xlsx文件,输出各班每人平均弃考门数,输出格式如图b所示,则划线处应填写的代码为 。(单选,填字母)
A.groupby('班级').弃考门数.mean()
B.groupby('班级',as index=False)['弃考门数'].mean()
import pandas as pd
df = pd.read_excel('ckqk.xlsx')
df['弃考门数']=df[['弃考科目1','弃考科目2','弃考科目3']].sum(axis=1)
dfg=df.
print(dfg)
(3)编写代码绘制如图c所示图表,则7先3科目中次考弃考比例超30%的有① 门。为实现该功能,请在下面划线处填入合适代码。
图c
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.figure('chart',figsize=(6,4))
plt.title('各科次考弃考比例分析')
plt.bar(dfs.index,② , label='弃考比例')
plt.ylabel('各科弃考百分比')
plt.xlabel('7选3科目'); plt.legend(); plt.show()
答案 (1)B (2)①subject not in courses或not subject in courses
②course[subject][1] += 1 (3)①5 ②dfs[″弃考比例″]
解析 (1)根据图b,分组方法gorupby的相应参数as_index=False。(2)①字典courses每对键值对的结构是:″科目″:[选科人数, 弃考人数],先判断字典中是否存在相应的键,不存在,就要创建相应的键值对。 ② 如果某同学某科目有弃考,则要对应科目弃考人数累加:course[subject][1] += 1。(3)①略。 ② 根据图C, 柱状图的数据分别是dfs.index, dfs.[″弃考比例″]。
15.小阳的创意工坊,每天都会接到很多订单,且每个订单花费一个单位时间。其中order列表中存储每个订单的截止时间和利润。假设他的工作是从0时刻开始算,订单能在截止时间内(包括截止时间)完成,就会获得利润。他可以选择完成当前时间之后的任意一个订单,过了截止时间的订单就会自动取消。
(1)为了获得较高利润,小阳想到按时间优先的方式来完成订单。为此定义tsort(lst)函数,其中参数lst的每个元素包括截止时间和利润。函数的功能是根据订单截止时间升序排列。
def tsort(lst):
n=len(lst)
for i in range(n-1):
for j in range(n-i-1):
答案 (1)3 (2)①p=i-1 ②order[i][0]>tail-head ③ans-= que[head][1]
(3)利润最大为13
解析 (1)加框处语句为冒泡排序中数组的交换次数,程序实现升序排列,只需找到数据中的逆序对。[2,4]和[1,4],[1,2]是逆序对,[3,5]和[2,3]是逆序对。(2)①实现在有序的队列que中插入新数据订单tmp,从后往前遍历,若大于tmp[1]的元素,则将其后移一位que[i]=que[i-1],同时更新变量p的值。②将没有超时的订单入队,并计算队列中所有订单的总利润。③在当前订单和已经入队的定单中删除一个利润最小的订单。若当前订单的利润大于队首订单的利润(队首订单利润最低),删除队首订单(出队处理),然后将当前订单入队并插入到合适的位置,从而保证利润总和最大。而ans已经存储了之前入队的订单利润和,因此当删除队首订单时,需要减去原队首订单利润,并加上当前入队订单利润。(3)利润最大为5+6+2。
展开更多......
收起↑