高效作业4 第4课 数组3——数组应用-【精彩三年】2024-2025学年高中信息技术选择性必修1课程探究与巩固PPT课件(浙教版2019)

2025-07-11
| 76页
| 26人阅读
| 3人下载
教辅
浙江良品图书有限公司
进店逛逛

资源信息

学段 高中
学科 信息技术
教材版本 高中信息技术浙教版选修1 数据与数据结构
年级 高二
章节 2.1 数组
类型 课件
知识点 数组的概念,数组的特性,数组的基本操作
使用场景 同步教学-新授课
学年 2024-2025
地区(省份) 全国
地区(市) -
地区(区县) -
文件格式 PPTX
文件大小 4.01 MB
发布时间 2025-07-11
更新时间 2025-07-11
作者 浙江良品图书有限公司
品牌系列 精彩三年·高中同步课程探究与巩固
审核时间 2025-07-11
下载链接 https://m.zxxk.com/soft/52989536.html
价格 4.00储值(1储值=1元)
来源 学科网

内容正文:

高效作业4 [第4课 数组3——数组应用] 1 2 3 4 5 6 7 8 9 10 11 【A级 新教材落实与巩固】 1.技术学科一共包含2门学科——信息技术和通用技术,这就需要我们关注学科的平衡,而衡量某名学生学科平衡的重要指标就是学科吻合度。我们采用信息技术与通用技术的得分差来判断(分差每3分为一级:分差0到3分(不含3分),表示“0级偏差”;分差3到6分(不含6分),表示“1级偏差”,分差6到9分(不含9分),表示“2级偏差”……分差最高为50分,最后一级分差48到50(含50分),表示“16级偏差”),计算每名学生的吻合度级别。根据题意,请回答下列问题。 (1)为了后续程序处理,我们需要把数据读入到程序中,每名学生一条记录。用Python存储学生测试得分数据,下列可行的是(以前两条记录为例)______(多选题)。 A.students=[[0901,50,32],[0902,50,45],…] B.students={'0901':['50','32'],'0902':['50','45'],…} C.students={0901:['50','32'],0902:['50','45'],…} D.students=[['0901','50','32'],['0902','50','45'],…] BD (2)编写函数f(xx,ty)以实现传入信息得分和通用得分,返回吻合度级别(返回示例:“1级偏差”)。 def f(xx,ty): return str(abs(xx-ty)//3)+'级偏差' 或其他等价答案 (3)请在下列程序段横线处填入合适的代码。 students={'0901':[50,82],'0902':[50,95],…}#(以前两条记录为例) for i in students.keys(): xx=_______________ ty=________________________________________________ print(i,':',f(xx,ty)) 【解析】 (1)学号是字符串类型的数据,选项B和D正确。 (2)将参数传递给函数f,计算偏差值,由返回示例:'1级偏差'可知,返回值是字符串类型,所以“return str(abs(xx-ty)//3)+'级偏差'”。 (3)利用字典类型存储,利用键获取键值,键值是列表,students[i][0]是信息,students[i][1]是通用。 students[i][0] students[i][1]-students[i][0] 或 students[i][1]-xx 1 2 3 4 5 6 7 8 9 10 11 2.编写程序,输入n,输出大小为n×n的蛇型矩阵,以二维矩阵的形式输出,如图1所示;以列表的形式输出,程序运行结果如图2所示。 定义二维数组a,利用a[x][y]表示第x行第y列的数据,请回答下列问题。 (1)根据题目要求,当n=6时,数组元素a[3][4]的值为______。 (2)实现该输出的程序代码如下,在程序横线处①②填入适当的语句或表达式,将程序补充完成。 26 def array(n): arr=[[0]*n for i in range(n)] x,y=0,0;num=1;①____________ while num<=n*n: for i in range(times):#向右 arr[x][y]=num num+=1 y+=1 times-=1;y-=1;x+=1 times=n for i in range(times):#向下 arr[x][y]=num num+=1 x+=1 x-=1;y-=1 for i in range(times):#向左 arr[x][y]=num num+=1 y-=1 ②______________________________ for i in range(times):#向上 arr[x][y]=num num+=1 x-=1 x+=1;y+=1 return(arr) n=int(input(”请输入n: ”)) print(array(n)) times-=1;y+=1;x-=1 【解析】 (1)输入6的结果为: [[1,2,3,4,5,6], [20,21,22,23,24,7], [19,32,33,34,25,8], [18,31,36,35,26,9], [17,30,29,28,27,10], [16,15,14,13,12,11]] 答案为26。 (2)蛇形矩阵的特征是顺时针从外到内元素值递增。可以设置4 个变量分别表示矩阵的左、右、上、下边界, 按照顺序横向、顺序纵向、逆序横向、逆序纵向的顺序从外向内依次修改每个元素的值,每修改一个元素值就让num增加1。 ①总共n列,需对times赋值,答案为times=n。 ②向左之后是向上,内圈比外圈小,列y要后移1列,行x要上移1行,总行数减少1行。 1 2 3 4 5 6 7 8 9 10 11 3.某学校为增加学生体育锻炼的积极性,采用签到换积分并用积分兑换奖品的活动,积分规则如下:第1 天签到得1 分,第2 天签到得2 分,第3 天签到得3 分,以此类推,第7 天及以上每次签到得7 分,如果中途漏签,那么下次签到的积分重新从1 分开始计算。如表格1 所示,签到总积分为10 分(1 表示签到,0 表示漏签)。表格2 是其中某一小组同学在某半个月内的签到情况,记录在“qiandao.xlsx”中,现需统计某小组每个组员半个月内的总积分,图1是小组成员的总积分对比图。 Excel 文件“qiandao.xlsx”中的数据存储在Python 中的列表df 中,以表格2 中的数据为例, df=[[1,1,1,1,1,1,1,1,1,1,1,0,1,1,1],[0,1,1,0,1,1,1,1,1,1,1,0,0,0,0],[1,1,1,1,0,1,1,1,1,1,1,1,0,1,1],[1,0,1,0,1,1,1,1,1,1,0,0,0,1,0]], 其中df[0][0]==1 表示张小红第1 天完成签到;df[1][3]==0 表示李明第4 天没有签到。 (1)若某同学15 天的签到记录为“101100111110111”,则该同学的总积分为______。 (2)实现上述功能的Python 程序如下,请在横线处填入合适的代码。 import pandas as pd import matplotlib.pyplot as plt #将Excel 文件“qiandao.xlsx”中的数据存储在Python 中的列表df 中,代码略 25 f=1;s=[];t=0 for i in range(len(df)): for j in range(len(df[i])): if ①_______________: if f>7: ②__________ else: t=t+f f=f+1 else: df[i][j]==1 t=t+7 ③_______ s.append(t) t=0 plt.bar(df[”姓名”],s) #绘制柱形图 plt.rcParams['font.sans_serif']='SimHei' #用来正常显示中文标签 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号 plt.show() #显示图表 (3)该程序段采用的算法是_____(单选,填字母:A.解析算法/B.枚举算法)。 f=1 B 【解析】 (1)按积分规则: 1 1 2  1 2 3 4 5  1 2 3 1 01 1 0 0 1 1 1 1 1 0 1 1 1 得分为25分。 (2)①判断是否签到,答案为df[i][j]==1。②如果连续签到7天以上,则积分每次加7。③若签到失败,则f重新计数,由于代码“t=t+f;f=f+1”,答案为f=1。 (3)对每天的签到情况进行判断,属于枚举算法。 1 2 3 4 5 6 7 8 9 10 11 4.2023·柯桥中学检测电路板布线问题。电路板的水平直线上,从左向右分布着n 个针脚(1,2,3,4,…,n)用于连接导线。连线(p,q)表示针脚p 和q 之间通过一根导线相连,导线只允许从水平直线的下方相连,对于给定的一组连线(p1,q1),(p2,q2),(p3,q3),…,(pn,qn),如果能适当安排这组连线,使它们互不相交,那么称这组连线是可布线的,如图1 所示。当出现如图2 所示的针脚相连时,则称它们是不可布线的。对于具有n 个针脚的直线,给定k 条连线,请通过程序判定这组连线能否布线。 (1)现在5 条导线的针脚位置分别为[1,4],[4,6],[7,8],[2,3],[5,7],这组连线________ (选填:可/不可)布线。 (2)实现上述功能的Python 程序如下,请在横线处填入合适的代码。 #输入k 条连线针脚位置数据,存入列表a 中,如a=[[1,4],[4,6],[5,8],[2,3]],代码略 不可 n=len(a) ①______________ i=0 while flag and i<n: for j in range(i+1,n): if a[i][0]<a[j][0]<a[i][1] and a[j][1]>a[i][1] or ② __________________________________________:     flag=False flag=True a[j][0]<a[i][0] and a[i][1]>a[j][1]>a[i][0] ③__________ if flag: print('可以布线') else: print('不能布线') 【解析】 (1)[4,6]与[5,7]交叉,不可布线。 (2)①flag需要设置初始值,结合下方代码,答案为flag=True。②结合上下文,flag为True表明可以布线,如果交叉,将flag设置为False,填空处为判断是否交叉的条件,答案为a[j][0]<a[i][0] and a[i][1]>a[j][1]>a[i][0]。③while循环的循环变量需要改变,答案为i+=1。 i+=1 1 2 3 4 5 6 7 8 9 10 11 5.某学校期中考试考场座位的编排方法:每个考场人数30 人,尾数考场可以不足30 人。每个考场的座位号是随机产生并按6 行5 列的布局编排,如图1 所示。编写Python 程序以实现上述功能,最终程序运行结果如图2 所示。 (1)程序中加框处代码有误,请改正:____________________________。 (2)请在横线处填入合适的代码。 from import random randint import math import csv b[i][j]=Seat_number[j*6+i] f=open(”Studentslist.csv”,”r”) f_csv=csv.reader(f) name=[] for row in f_csv: # 读取学生名单,第一行为标题行 name.append(row[1]) #学生姓名从第二行第二列开始存放,如图3 kch=int(input(”请输入第几考场: ”)) num=①_______________________________________________________ ______________ #math 模块中的ceil()函数为向上取整, floor()函数为向下取整 math.ceil((len(name)-1)/30)或 abs(-(len(name)-1)//30)或 其他等价答案 print(”总共有%d 个考场”%num) Seat_number=[] i=0 flag=[False]*31 begin=(kch-1)*30 while i<30: # 随机产生座位号1~30 t=randint(1,30) if ②______________________________: not flag[t] 或 flag[t]==False   Seat_number.append(str(i+1)+” ”+name[t+begin])   flag[t]=True   i+=1 b=[[”” for j in range(5)] for i in range(6)] for i in range(6): for j in range(5): print(”第%d考场的原始座位布局: ”%kch) c=[[””for j in range(5)]for i in range(6)] for i in range(6): line=”” for j in range(5): line=line+” ”+b[i][j]+” ”*(6-len(b[i][j])) print(line) for i in range(6): for j in range(5): if j%2==1: ③___________________ else: c[i][j]=b[i][j] print(”第%d考场的最终座位布局: ”%kch) for i in range(6): line=”” for j in range(5): line=line+” ”+c[i][j]+” ”*(6-len(c[i][j])) print(line) c[i][j]=b[5-i][j] 【解析】 (1)将数组下标都标出,如下表。数组b为二维数组。 (2)①本处统计总考场数。总参考人数为len(name)-1。 ②本处为不相同随机数的应用。flag数组初值为False, 若产生的座位号已产生过, 则置为True。 故flag[t]=False时, 将座位号及考生姓名加到 一维数组Seat_number中。注意本处t变量不是考生座位号。 ③本题考查一维数组与二维数组下标变换问题, 奇数列位置倒排。 1 2 3 4 5 6 7 8 9 10 11 【B级 素养形成与评价】 6.2023·义乌中学检测某校举行趣味运动赛,共有n 个比赛项目,每班派n 名学生参加,每名同学分别参加一个项目。某班有n 名选手报名参加比赛,现需要依据他们平时练习中各个项目的平均得分,找出最佳参赛组合,查找规则为查找比赛中各项目得分总和最大的组合,例如:图1所示的数据中,最佳参赛组合是“唐昌新:跳绳,胡鹏:飞镖,杨胜超:颠球,陈伟:套圈”。 编写如下Python 程序,实现查找最佳参赛组合的功能,运行界面如图2所示,请在横线处填入合适的代码。 def check(s): #判断s 中是否有重复值 f=[0]*len(s) for i in s: ①____________ f[i]+=1 return False return True a=[] f=open(”cj.txt”,”r”) title=f.readline().split() #读取标题行 for line in f.readlines(): line=line.split() a.append(line) n=len(a);max=0 for i in range(0,n**n): k=i; s=[0]*n; p=0 while k!=0: s[p]=k%n k=②_______ p=p+1 if check(s)==True: sum=0 for i in range(len(s)): k//n sum+=int(③_____________) if sum > max: ④______________ ss=s print(”最佳参赛组合: ”) for i in range(n): print(a[i][0],title[ss[i]+1]) 【解析】 程序按行读取文件中的内容并转换成列表,存储到列表a中,a 的结构为[[唐昌新,117,127,113,138],[胡鹏,109,182,101, a[i][s[i]+1] max=sum 168],…],采用枚举的思维,列举出所有解,并找出最佳组合。②n=4,利用进制转换进行枚举,将0~255的每个数转化成4进制,存储在列表s中,根据进制转换的思想,答案为k//n。①f=[0]*len(s),定义了len(s)长度的桶,用于判断每位选手是否只出现了一次,答案为f[i]+=1。③check(s)==True成立,表示组合正确,则开始计算得分综合,根据列表s将选手参加的相应项目得分累加,例如s=[0123], 则表示唐昌新参加跳绳项目,胡鹏参加颠球项目……;由于列表a为二维列表,且小列表的第1个元素为选手姓名,故答案为a[i][s[i]+1]。④如果sum>max成立,则表示当前值大于最大值,需要更新最大值,答案为 max=sum。 1 2 3 4 5 6 7 8 9 10 11 7.我们所看到的网页上的每一张图片,都是消耗了一个http 请求下载而来的,图片字符化后就可以随HTML 同时下载到本地,从而缓解服务器压力,对于文本图片,还可以通过二值化,行程压缩进一步压缩图片容量提升传输效率,文本图片字符化步骤如下: ①将图像转化为灰度图像(位深度8),并将灰度值以矩阵形式存储; ②将图像二值化,设定阈值128,灰度值大于128 时设为1,否则设为0; ③通过步骤②得到一个“0/1”二维矩阵,按行优先,6 个元素一组(6 位“0/1”串)转为数值(0~63),通过字符列表映射为对应字符,同时对字符串进行行程压缩,如实际字符串“aaaaaacccceefff”,行程压缩后为 “6a3c2e3f”(注:矩阵最后一组数据如不足6 位,在低位补“0”)。 (1)如果图像生成的“0/1”二维矩阵为8×8,通过步骤③压缩后,得到的字符串长度最小为______(注:“6a3c2e3f”长度为8)。 (2)图片压缩程序部分程序代码如下,请在横线处填入合适的代码。 from PIL import image import numpy as np 22 to64=[”A”,”B”,”C”,”D”,”E”,”P”,”G”,”H”,”I”,”J”,”K”,”L”,”M”,”N”,”O”,”P”,”Q”, ”R”,”S”,”T”,”U”,”V”,”W”,”X”,”Y”,”Z”,”a”,”b”,”c”,”d”,”e”,”f”,”g”,”h”,”i”,”j”,”k”,”l”,”m”,”n”,”o”,”p”,”q”,”r”,”s”,”t”,”u”,”v”,”w”,”x”,”y”,”z”,”!”,”@”,”#”,”$”,”%”,”-”,”&”,”*”,”(”,”)”,”+”,”/”] #读取图片文件,并将其转为灰度二维矩阵 img=np.array(Image.open(”图片.bmp”).convert(”L”)) rows, cols=img.shape #将灰度二维矩阵(0~255),转为(0/1)二维矩阵 for i in range(rows): for j in range(cols): if (①_______________ ): img[i, j]=1 else: img[i,j]>128 img[i, j]=0 s=0;t=-1;b=[];st=””;n=0 #将(0/1)二维矩阵字符化,并行程压缩 for i in range(rows): for j in range(cols): s=s*2+img[i, j] if (((i*cols+j)+1)%6==0): if ②_____________________: st=st+str(n)+to64[t] s!=t and t!=-1 n=0 n=n+1 t=s s=0 #当尾部元素不足6 位,低位补0 存入列表b if (rows*cols%6!=0):  for i in range(③___________________) s=s*2 if s!=t: 6-(row*cols%6) st=st+str(n)+to64[t]+”1”+to64[s] else: st=st+str(n+1)+to64[t] 【解析】 (1)通过“6个元素为一组”的分组规则对8×8共64个元素进行分组,共可分为11组数据,其中第11组不足6个元素。在最糟糕的情况下,每组元素转换后的字符均不相同,则转换为形如“1a1b1c…”的加密串,那么11个元素的最大长度为11×2=22。 (2)第①空,根据if后的执行语句img[i, j]=1 或=0的赋值,结合题干中有关于“阈值”128的设定可知,当灰度值大于128时设置为1,所以此处 答案为img[i,j]>128。第②空是对“6个元素为一组”进行分组的实践操作:利用变量s记录当前已经读取到的二进制数的值,这里的s=s*2+img[i,j],使用“按位读数”的思想,是进制转换中常用的手段。当满足“((i*cols+j)+1)%6==0”时,恰好读取了连续的6个元素,此时根据当前数据与上一个数据是否相同来决定是输出还是计数(若当前数据s与前一个读取的数据t相同则计数,直到读到不同数据时输出)。所以此处的答案为s!=t。第③空是对末尾补0,计算需要补0的个数。表达式“row*cols%6”表示最后一组的元素个数,当它为0时不需要补0,而不为0时,需要补(6-row*cols%6)个0,那么此处的答案为6-(row*cols%6)。 1 2 3 4 5 6 7 8 9 10 11 8.编号为1到10 的10位同学参加了通用老师开展的连续5日的每日专题训练,每天训练1次,每份训练卷有4题,老师将这5份训练卷的错题题号和对应的学生编号保存在“错题表.txt”中。如图1所示,第1到4行分别记录了这5天里第1到4题出错的学生编号。例如第1行的“2,7,2,5,2,4,8”表示第1题2号同学总共错了3次,4号5号7号8号同学分别错了1次。 编写Python程序,统计“错题表.txt”中的数据,统计结果按学生编号和题号顺序保存到errorcount中(如图2所示)。运行程序,输出结果如图3所示,例如图中[0,0,2,0]表示1号同学第1题错0次,第2 题错0次,第3题错2次,第4题错0次。 (1)若下次训练每份训练卷的题目数量从4 题改为5 题,且考试人数仍为10人,不改动程序代码是否仍可以统计得到正确结果?______(选填:是/否) (2)请在横线处填入合适的代码。 f=open(”错题表.txt”,”r”) line=f.readline() errorcount=[0]*40 #建立一个列表,包含40个元素,值均为0 row=0 #记录题号 否 while line: ①_____________ line=line.strip() #strip()可以去除字符串尾部的换行符” ” for i in range(len(line)): if ”0”<=line[i]<=”9”: temp+=line[i] #temp记录学生编号 else: p=②________________________ errorcount[p]+=1 temp=”” temp=”” (int(temp)-1)*4+row ③___________________________ line=f.readline() f.close() for i in range(0,10): print(i+1,”号同学: ”,④_______________________________ ________________________) row+=1 或 row=row+1 errorcount[i*row,(i+1)*row] 或 errorcount[i*4,(i+1)*4] 【解析】 (1)需要改变相关代码,例如语句“errorcount=[0]*40”,需要改为errorcount=[0]*50。 (2)①由上下语句可知,此处初始化temp,答案为temp=””。②一维列表errorcount模拟二维列表;temp为错题对应的学号,根据行号,在errorcount中存储相应学生错误次数,由于Python的特征是从0开始编号,共有4道题,4个一组,temp号同学的错题统计从(int(temp)-1)*4+0,到(int(temp)-1)*4+3,答案为(int(temp)-1)*4+row。③进入下一行(下一题),答案为row+=1。④对errorcount切片,每次读取第i位同学的row道题,答案为errorcount[i*row,(i+1)*row]。 1 2 3 4 5 6 7 8 9 10 11 9. 一个整数序列,如果两个相邻元素的差恰好正负(负正)交替出现,则称该序列为摇摆序列。小王同学想求出某个数列的最长摇摆子序列。以序列[3,14,7,6,9,12,10,8,13,5]为例,整体不是摇摆序列,但子序列[3,14,7,9]、[3,14,6,12]等都属于摇摆子序列,其中最长的摇摆子序列是[3,14,6,12,8,13,5]。当序列有一段连续的递增(或递减)时,可形成摇摆子序列,我们只需要找到每一次转折中的拐点元素。小王编写了一个Python程序以实现该功能,程序运行时,输入一串用逗号分隔和结束的数字,可以得到最长摇摆序列的长度,以及具体的序列。 (1)若输入数据“2,4,5,3,2,1,”,则最长摇摆子序列为___________。 (2)实现上述功能的Python代码如下,请在横线处填入合适的代码。 s=input("请输入以逗号分隔和结束的数据( 不超过20个数) : ") a=[0]*20 2,5,1 b=[False]*20 flag,n,i,t,ans=0,0,0,"","" def f(n): f=1 global ans #global表示ans是全局变量 ans=str(a[n-1]) for i in range(n-2,-1,-1): if b[i]: f=f+1 ①_____________________________ return f for ch in s: if ch==",": a[i]=int(t) n+=1 i+=1 t="" else: t=t+ch ans=str(a[i])+","+ans for i in range(1,n): gd=True if flag==0: if a[i]>a[i-1]: flag=1 elif a[i]<a[i-1]: flag=2 else: gd=False elif flag==1and a[i]<a[i-1]: flag=2 elif②__________________________: flag=1 else: gd=False ③_______________ if f(n)<3: print("不构成摇摆子序列") flag==2and a[i]>a[i-1] b[i-1]=gd else: print("最长摇摆子序列长度为",str(f(n))) print("最长摇摆子序列为",ans) 【解析】 列表a用于存储输入的数据元素,列表b用于记录是否为拐点,ans记录最长摇摆子系列最长的具体元素,函数f()统计摇摆子系列的长度。函数f()从后往前遍历列表b,若为True,则i为拐点,将元素记录到ans中,因此①处填写ans=str(a[i])+","+ans;flag数组记录摇摆系列的前一次状态,初始状态为0,若为递增状态为1,递减状态为2,②处为flag==2 and a[i]>a[i-1];gd记录是否为拐点,flag是摇摆系列的前一次状态,状态变换时实际上拐点为i-1,因此③处为b[i-1]=gd。 1 2 3 4 5 6 7 8 9 10 11 10.2023·东阳中学检测某学校图书馆周末开放时间为8:00 至21:00,学生必须使用校园卡打卡才能进出。管理员为了解学生进出及停留情况,将一天的打卡数据进行了整理,统计了每小时的学生流量,并统计了各班级当天到图书馆的人数及总时间。分析方法如下: ①读取“图书馆打卡数据.xlsx”中的数据并用Python 进行处理,按学号为主要关键字、打卡时间为次要关键字进行升序排序,排序后数据如图1 所示: ②对于部分学生的打卡记录,系统只存储了进入或出去的时间,此类数据不进行统计。若当天同一学生多次进出也只算一次,统计分析结果如图2、图3 所示。 (1)实现该算法的Python程序如下,请在横线处填入合适的代码。 import pandas as pd import matplotlib.pyplot as plt def convert(a): #将如“08:00”的时间格式转成“480”的分钟样式 t=int(a[9:11])*60+int(a[12:14]) return t df=pd.read_excel(”自习室打卡数据.xls”) df=df.①_____________ (by=[”学号”,”打卡时间”],ascending=True) print(df) a=[] for i in df.index: a.append([df.at[i,”姓名”],df.at[i,”学号”],df.at[i,”班级”], convert(df.at[i,”打卡时间”])]) sort_values i=0;d={} #字典d 存储各班级的人数和总时间 time=[0]*13 #存储每时段人数,time[0]存储8 点时段,以此类推 while i<len(a)-1: if a[i][1]==a[i+1][1]: st1=(a[i][3]-480)//60;st2=(a[i+1][3]-480)//60 for j in range(st1,st2+1): ②______________ bj=a[i][2] time[j]+=1 if i==0 or    if bj not in d: #若班级不存在则添加到字典中 d[bj]=[0,0] d[bj][0]+=1 #处理班级人数 d[bj][1]+=a[i+1][3]-a[i][3] #处理班级总时间 ③__________ i+=1 print(” ☆ 8 点~21 点各时段在馆人数☆ ”) print(time) i+=1 #使用班级、学生人数、总时间数据可视化如图3所示,代码略 (2)程序中方框处代码有误,请改正:_____________________。 【解析】 (1)①根据题意以及前后代码可知,这里是按要求进行排序:sort_values;②更新时间段的人数:time[j]+=1;③根据整段代码的执行条件“a[i][1]==a[i+1][1]”可知,完成后i 的值应该更新:i+=2,考虑到后面还有i+=1,这里应该是:i+=1。满足了题意描述的“只存储了进入或者出去的时间,不统计”。 (2)这里满足条件的代码是在更新班级人数。由于数据已经按学号排序,如果和前面的是同一个人,不应该更新,所以这里的条件是:a[i][1]!=a[i-1][1]。 a[i][1]!=a[i-1][1] 1 2 3 4 5 6 7 8 9 10 11 11.2023·学军中学检测利用某火车购票系统购票,购买者输入“出发站”“目的站”,系统会统计两站之间的占座情况,根据空座数量(出发站至目的站之前一直是空的座位即为空座)返回余票情况,购买者根据余票信息购买车票,获得具体座位号。根据上述功能,小王编写了一个Python 程序模拟该购票系统,以“杭台高铁”为例,全线共设9 个车站,某趟列车共有8 节车厢,每节车厢共有17 排,每排5 个座位(编号分别是A、B、C、D、F),共680 个座位,某时刻的占座情况如下图所示。具体设计如下:从数据库中读取占座情况存储在列表seat 中(例如:序号为84的座位各站点占座情况,在seat[84]中表示为[1,1,0,0,0,0,1, 1],索引号2 至5 的值都为0,即当出发站为临海站,目的站为上虞南站时,该座位为空座),然后根据购买者输入的出发站和目的站的站点名称,统计空座数量及相应的座位序号,根据购票信息,输出购票的具体座位(其中连票数量尽可能多)。 (1)主程序,根据购票步骤,请在横线处填入合适的代码。 #获取列车每个座位号及其在各站点占座情况,存储在二维列表seat 中,代码略 site=[”温岭”,”台州”,”临海”,”天台山”,”嵊州新昌”,”嵊州北”,”上虞南”,”绍兴北”,”杭州东”] begin=site.index(input(”输入出发站: ”) #index 方法用于获取列表的索引号 end=site.index(input(”输入目的站: ”) tic=gethavet((begin,end) #获取基于出发站和目的站前的所有空座座位序号列表 if len(tic)>0: num=int(input(”尚有余票”+①_____________+”张, 请输入购买的数量: ”) if num<=len(tic): seatno,ser=assignment(num,tic) #获取相应座位序号及连票数量 #seatno 列表存储格式如:[4,5,6,7,8]或[4,5,6,8,9] print(”购票”+str(num)+”张, 其中连票数量”+str(ser)+”张!座位信息如下: ”) snum=['A','B','C,'D','F'] #每排座位的编号 str(len(tic)) for k in seatno: coach,row=k//85+1, k%85//5+1 ②_______________________ print(str(coach)+”车厢”+str(row)+”排”+number+”座”) #将新的占座数据写入数据库,代码略 else: print((”购买数量不得大于余票数量! ”) else: print(”余票不足! ”) number=snum[k%5] (2)获取余票数据。如下的gethavet() 函数,获取出发站至目的站前的空座座位序号,保存在列表s 中并返回。请在横线处填入合适的代码。 def gethavet(x,y): s=0 for i in range(680): nows=seat[i] #nows 存储当前序号各个站点的占座情况 if ③_______________________________________________________ ______________________________________:    s.append(i) return s sum(nows[x:y])==0 或nows[x:y].count(1)==0或nows[x: y].count(0)==y-x 或not 1 in nows[x:y] (3)座位分配。如下的assignment() 函数,按序号查找连票,如果找到一组连票数量等于购买的数量,则退出查找并返回相应信息,若连票数量不足,则补充座位数量后返回。请在横线处填入合适的代码。 def assignment(n,tic): maxs,head,tmp=1,0,1 for i in range(1,len(tic)): if ④______________________: tmp+=1 if tmp> maxs: maxs=tmp tic[i]==tic[i-1]+1 head=i-maxs+1 #记录连票的开始位置 if maxs==n: break #满足需要的数量,结束查找 else: tmp=1 #将连票的座位序号存于列表slist,若连票数量不足则补充座位数量,代码略     return[slist,maxs] 【解析】 (1)主程序,tic 变量从注释中可以了解到存储了可用的空座序号列表。第①空要求表示可用空座的数量,即len(tic)。本题中由于使用“+”运算符做字符串运算,因此需要额外使用str 函数转换为字符串类型。因此答案为str(len(tic))。输出座位时,分别使用conch、row、number 变量存储当前座位的车厢、排、座位编号。对于每个座位序号k in sentno,通过对85 的整除和模运算计算了车厢和排序号,很多学生会思维惯性地用85 继续当作主要参数计算number,而实际上座位编号是在A~F 上循环编号的,所以第②空的答案是number=snum[k%5]。 (2)完善主程序中调用的gethavet()函数。函数功能是计算空座列表。 如图所示,两个座位84 和85分别存储为[1,1,0,0,0,0,1,1]和[0,0,1,1,1,0,0,1],根据题目要求,连续的0 即为连续站的空座,是在这些站上可售的座位。因此,对于nows=seat[i](seat[i]中存储了当前第i 个座位在各站的空座情况),nows[x:y]表示当前座位在出发站到终点站前的空座情况,只要该连续站上均为空座即可售票。注意:这里表示为now[x:y+1]是错误的,因为在终点站下车,终点站本身是否已售并不重要。第③空的等价答案很多,通常习惯用sum(nows[x:y])==0。 (3)寻找连续的座位,观察代码“for i in range(1,len(tic))”可知,相邻项的比较次序是当前项与前一项比较。因此,答案为tic[i]==tic[i-1]+1。 感谢聆听,再见! $$

资源预览图

高效作业4 第4课 数组3——数组应用-【精彩三年】2024-2025学年高中信息技术选择性必修1课程探究与巩固PPT课件(浙教版2019)
1
高效作业4 第4课 数组3——数组应用-【精彩三年】2024-2025学年高中信息技术选择性必修1课程探究与巩固PPT课件(浙教版2019)
2
高效作业4 第4课 数组3——数组应用-【精彩三年】2024-2025学年高中信息技术选择性必修1课程探究与巩固PPT课件(浙教版2019)
3
高效作业4 第4课 数组3——数组应用-【精彩三年】2024-2025学年高中信息技术选择性必修1课程探究与巩固PPT课件(浙教版2019)
4
高效作业4 第4课 数组3——数组应用-【精彩三年】2024-2025学年高中信息技术选择性必修1课程探究与巩固PPT课件(浙教版2019)
5
高效作业4 第4课 数组3——数组应用-【精彩三年】2024-2025学年高中信息技术选择性必修1课程探究与巩固PPT课件(浙教版2019)
6
所属专辑
相关资源
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。