内容正文:
浙江省县域2025-2026学年第二学期学业水平模拟考试
技术试卷
考生须知:
1.本试题卷分两部分,第一部分信息技术,第二部分通用技术。满分100分,考试时间60分钟。
2.答题前,在答题卷指定区域填写班级、姓名、考场、座位号及准考证号并核对条形码信息。
3.所有答案必须写在答题卷上,写在试卷上无效,考试结束后,只需上交答题卷。
第一部分 信息技术(共50分)
一、选择题(本大题共9小题,每小题3分,共27分。每小题列出的四个备选项中只有一个是符合题目要求的,不选、多选、错选均不得分)
阅读下列材料,完成下面小题
某地企业部署了AI火情预警系统,该系统利用监控设备将现场视频与图像数据上传至云端进行分析,一旦识别出火情隐患,系统将自动发出预警,并同步发送预警信号至属地应急部门,由应急部门统一调度。消防站开展协调扑救,从而形成闭环处置流程。
1. 关于材料中的数据,下列说法正确的是( )
A. 所有数据必须来源于同一种传感器,才能保证数据一致性
B. 实时采集的数据可以为安全监测和风险判断提供依据
C. 若采集的数据规模足够大,就无需再进行数据分析
D. 数据采集可用于事后分析,与火情无直接关系
2. 下列关于该信息系统安全的做法,合理的是( )
A. 定期修复系统漏洞 B. 所有数据均采用明文方式传输
C. 给所有岗位分配相同的访问权限 D. 为工作人员设置免密登录
3. 在该系统的运行过程中,应用到人工智能技术的是( )
A. 应急部门调度消防站开展协调扑救 B. 将视频数据上传至云端
C. 系统自动发出预警信号 D. 识别火情隐患
阅读下列材料,完成下面小题
某校搭建了校园门禁系统。学生出入校园通过摄像头识别人脸,显示屏显示识别结果,若识别成功打开闸机,同时出入校园数据上传至服务器。家长可通过移动终端APP查看学生的出入校门信息,还可在APP上帮学生请假。请假时,家长需要输入请假时间及理由,并上传照片加以佐证。
4. 下列关于该信息系统组成和功能的说法,正确的是( )
A. 系统中的数据仅包含出入数据 B. 该系统的用户只有学生和家长
C. 该系统具备数据查询功能 D. 家长用于请假的APP属于系统软件
5. 下列关于该信息系统中网络技术的说法,正确的是( )
A. 学生的出入数据只能通过移动通信网络传输
B. 家长查看出入信息时,数据传输仅通过HTTP协议
C. 家长的移动终端与服务器应处于同一局域网中
D. 家长可查询学生出入信息,体现了网络的资源共享功能
6. 下列属于该系统硬件的是( )
①摄像头 ②数据库 ③电子显示屏 ④闸机 ⑤照片
A. ①②③ B. ①③④ C. ③④⑤ D. ②③④
7. 某学生未经压缩的照片参数为1024×768像素、24位真彩色,为了上传到人脸识别系统,将其按9:1进行压缩,则该照片压缩后的存储容量约为( )
A. 2048B B. 256KB C. 2048KB D. 256MB
8. 根据系统要求,家长请假上传照片的存储容量k的大小范围为t1~t2(t1<t2),若在范围之内则提示“可上传”,否则提示“不可上传”。下列Python程序段中,不能实现该规则的是( )
A.
s="可上传"
if k< t1 or k>t2:
s= "不可上传"
B.
if k<t1 or k>t2:
s="不可上传"
else:
s= "可上传"
C.
if k>=t1:
s= "可上传"
if k<=t2:
s= "可上传"
else:
s="不可上传"
D.
if k<t1:
s= "不可上传"
elif k<=t2:
s= "可上传"
else:
s= "不可上传"
A. A B. B C. C D. D
9. 有如下Python程序段:
s=input()
n=len(s)
i=0
while i<n:
ch=s[i]
if "0"<=ch<="9":
s=ch+s[0:i]+s[i+1:]
i+=1
else:
s=s[0:i]+s[i+1:]+ch
n-=1
print(s)
执行该程序段后,若输出结果为1234abcd,则输入的s不可能为( )
A. ab12cd34 B. abcd4321 C. 43ab21cd D. 4abc3d21
二、非选择题(本大题共2小题,其中第10小题12分,第11小题11分,共23分)
10. 某校搭建了校园智能饮水台监测系统,实现对饮水台出水温度、剩余水量的实时监测和智能调控。智能终端读取传感器的数据,并将水量数据和出水温度通过网络上传至web服务器。当温度低于80℃或水量低于3L时,加热器或水泵启动,同时将提醒信息推送至后勤管理端。后勤人员可以通过浏览器远程查看饮水台的历史监测数据和实时状态。请结合系统设计,回答下列问题:
(1)该系统采用的网络架构是__________(A.B/S架构;B.C/S架构)
(2)下列关于传感与控制技术说法正确的是
A. 传感器、加热器和水泵不能连接在同一智能终端
B. 控制指令只能由智能终端发出
C. 通过控制技术实现水泵的启动
D. 传感器属于信息输出设备
(3)下列关于该系统的说法正确的是 (多选)
A. 数据只能存储在服务器中
B. 加热器和水泵属于该系统的执行器
C. 传感器与智能终端之间的数据是双向传输
D. 智能终端与服务器之间的数据是双向传输
(4)系统正常工作一段时间后,某天后勤人员访问浏览器时,页面显示的实时水温低于80℃,但加热器不工作,检查发现温度传感器无故障,简要说明造成上述问题的原因__________(写出一项)
(5)现将该系统中某天饮水台的数据导出到“result.xlsx”文件中,部分数据如表所示。统计并输出该天提醒信息次数最多的饮水台编号(若有多个则一并输出)。实现上述功能的Python程序如下,请选择合适的代码填入划线处(单选)。
编号
采集时间
出水温度
剩余水量
Y01
2026-03-10 08:00
78
3.23
Y02
2026-03-10 08:00
80
2.53
Y03
2026-03-10 08:00
98
3.6
Y04
2026-03-10 08:00
93
4.89
Y05
2026-03-10 08:00
70
3.16
Y06
2026-03-10 08:00
91
3.84
Y07
2026-03-10 08:00
82
3.32
Y08
2026-03-10 08:00
99
4.63
Y09
2026-03-10 08:00
91
3.84
Y01
2026-03-10 08:00
80
3.34
Y02
2026-03-10 08:00
82
2.61
Y03
2026-03-10 08:00
97
3.75
Y04
2026-03-10 08:00
90
4.53
Y05
2026-03-10 08:00
75
3.22
import pandas as pd
df=pd.read_excel("result.xlsx")
df["是否提醒"]=0 #新增“是否提醒”列
for i in df.index:
t=df.at[i, "出水温度"]
w=df.at[i, "剩余水量"]
if t<80 or w<3:
df.at[i, "是否提醒"]=1
df1=____________________
#对df1进行降序排序并重置索引
df2=df1.sort_values("是否提醒", ascending=False, ignore_index=True)
df3=__________________
print("提醒信息次数最多的是: ")
print(df3.编号)
可供选择的代码有:
A. df.groupby("编号", as_index=False).是否提醒.sum() #分组求和
B. df.groupby("编号", as_index=False).是否提醒.count() #分组计数
C. df1[df1["是否提醒"]==df1["是否提醒"][0]] #筛选
D. df2[df2["是否提醒"]==df2["是否提醒"][0]]
11. 为养成良好的储蓄习惯,小项每年按月记录收支情况并制定储蓄计划。每月收支情况存储于文本文件中,如图a所示,其中1月份的记录内容如图b所示。储蓄计划包含基础储蓄和额外储蓄两部分。若某月收入不大于支出,则该月无需储蓄。若某月收入大于支出,将盈余的20%作为基础储蓄;额外储蓄则按如下规则计算:若该月与前一个月均满足收入大于支出,则该月在上一个月的基础上再增加120元。实现该功能的Python程序如下,请回答下列问题:
(1)若收入支出字典为items={0: ["餐饮", "交通", "服饰", "娱乐"],1:[ "工资", "奖金", "其他收入"]},其中0为支出项目,1为收入项目。根据图b所示数据,一月份小项__________存入储蓄资金。
(A.需要/B.不需要)
(2)定义函数save(data),计算出需要存入的储蓄资金,其中列表data依次记录了各月份的支出总和、收入总和(data[0]为1月支出总和,data[1]为1月收入总和,...)
def save(data):
count=0
total=0
for i in range(1,len(data),2):
if data[i-1]<data[i]:
mnow=(data[i]-data[i-1])*0.2+count*120
total+=mnow
① _____
else:
mnow=0
count=0
return total,mnow
(3)定义函数tj (fname, dic, money),功能是计算出每个月的支出与收入总和,其中fname为收支数据文件名、dic为收入支出项目字典。请在划线处填入合适的代码。
def tj (fname, dic, money):
f=open(fname, "r", encoding= "utf-8") #打开文件
line=f.readline().strip() #读取文件中的一行并去除换行符
while line: #当line非空
for i in range(len(line)):
if line[i]== ",":
item=line[0:i]
if ②_____:
money[0]=money[0]+float(line[i+1:]) #money[0]为支出总和
else:
money[1]=money[1]+float(line[i+1:]) #money[1]为收入总和
break
line=f.readline().strip()
return money
(4)主程序如下,加框处代码有误,请修正。
items={0:[ "餐饮", "交通", "服饰", "娱乐"],1:[ "工资", "奖金", "其他收入"]}
month=int(input())
data=[0]*month*2
for i in range(1,month+1):
money=[0,0]
fname=str(i)+ ".txt"
money=tj(fname, items, money)
data[i-1],data[i]=money[0], money[1]
t,m=save(data)
print("本月应存入的储蓄资金: ", m, "元。")
print("已累计存入的储蓄资金: ", t, "元。")
第1页/共1页
学科网(北京)股份有限公司
$
浙江省县域2025-2026学年第二学期学业水平模拟考试
技术试卷
考生须知:
1.本试题卷分两部分,第一部分信息技术,第二部分通用技术。满分100分,考试时间60分钟。
2.答题前,在答题卷指定区域填写班级、姓名、考场、座位号及准考证号并核对条形码信息。
3.所有答案必须写在答题卷上,写在试卷上无效,考试结束后,只需上交答题卷。
第一部分 信息技术(共50分)
一、选择题(本大题共9小题,每小题3分,共27分。每小题列出的四个备选项中只有一个是符合题目要求的,不选、多选、错选均不得分)
阅读下列材料,完成下面小题
某地企业部署了AI火情预警系统,该系统利用监控设备将现场视频与图像数据上传至云端进行分析,一旦识别出火情隐患,系统将自动发出预警,并同步发送预警信号至属地应急部门,由应急部门统一调度。消防站开展协调扑救,从而形成闭环处置流程。
1. 关于材料中的数据,下列说法正确的是( )
A. 所有数据必须来源于同一种传感器,才能保证数据一致性
B. 实时采集的数据可以为安全监测和风险判断提供依据
C. 若采集的数据规模足够大,就无需再进行数据分析
D. 数据采集可用于事后分析,与火情无直接关系
2. 下列关于该信息系统安全的做法,合理的是( )
A. 定期修复系统漏洞 B. 所有数据均采用明文方式传输
C. 给所有岗位分配相同的访问权限 D. 为工作人员设置免密登录
3. 在该系统的运行过程中,应用到人工智能技术的是( )
A. 应急部门调度消防站开展协调扑救 B. 将视频数据上传至云端
C. 系统自动发出预警信号 D. 识别火情隐患
【答案】1. B 2. A 3. D
【解析】
【1题详解】
本题考查数据的基础知识与应用。数据可来源于多种不同传感器,经过规范处理即可保证数据一致性,因此第一个选项错误;实时采集的现场数据能够帮助相关人员及时掌握现场情况,为安全监测和风险判断提供依据,因此第二个选项正确;即使数据规模足够大,也需要通过数据分析挖掘有效信息,才能得到有价值的结论,因此第三个选项错误;数据采集不仅可用于事后分析,实时采集的数据还直接用于火情隐患的识别预警,和火情直接相关,因此第四个选项错误。故答案为:B。
【2题详解】
本题考查信息系统安全防护知识。定期修复系统漏洞可以有效避免系统被非法攻击,提升信息系统安全性,是合理的做法,因此第一个选项正确;所有数据采用明文方式传输会增加数据泄露、被篡改的风险,做法不合理,因此第二个选项错误;给所有岗位分配相同的访问权限,不符合权限分级管理的安全原则,容易引发信息安全问题,做法不合理,因此第三个选项错误;设置免密登录会增加非授权访问的风险,威胁系统和数据安全,做法不合理,因此第四个选项错误。故答案为:A。
【3题详解】
本题考查人工智能技术的应用。人工智能技术是指让机器具备类似人类智能处理能力的技术,应急部门人工调度扑救属于人工协调,不属于人工智能技术的应用,因此第一个选项错误;将视频数据上传到云端属于数据传输操作,不涉及人工智能,因此第二个选项错误;系统自动发出预警信号是预警触发后的普通程序响应操作,不涉及人工智能,因此第三个选项错误;识别火情隐患是利用AI图像识别技术完成的,属于人工智能技术的应用,因此第四个选项正确。故答案为:D。
阅读下列材料,完成下面小题
某校搭建了校园门禁系统。学生出入校园通过摄像头识别人脸,显示屏显示识别结果,若识别成功打开闸机,同时出入校园数据上传至服务器。家长可通过移动终端APP查看学生的出入校门信息,还可在APP上帮学生请假。请假时,家长需要输入请假时间及理由,并上传照片加以佐证。
4. 下列关于该信息系统组成和功能的说法,正确的是( )
A. 系统中的数据仅包含出入数据 B. 该系统的用户只有学生和家长
C. 该系统具备数据查询功能 D. 家长用于请假的APP属于系统软件
5. 下列关于该信息系统中网络技术的说法,正确的是( )
A. 学生的出入数据只能通过移动通信网络传输
B. 家长查看出入信息时,数据传输仅通过HTTP协议
C. 家长的移动终端与服务器应处于同一局域网中
D. 家长可查询学生出入信息,体现了网络的资源共享功能
6. 下列属于该系统硬件的是( )
①摄像头 ②数据库 ③电子显示屏 ④闸机 ⑤照片
A. ①②③ B. ①③④ C. ③④⑤ D. ②③④
7. 某学生未经压缩的照片参数为1024×768像素、24位真彩色,为了上传到人脸识别系统,将其按9:1进行压缩,则该照片压缩后的存储容量约为( )
A. 2048B B. 256KB C. 2048KB D. 256MB
8. 根据系统要求,家长请假上传照片的存储容量k的大小范围为t1~t2(t1<t2),若在范围之内则提示“可上传”,否则提示“不可上传”。下列Python程序段中,不能实现该规则的是( )
A.
s="可上传"
if k< t1 or k>t2:
s= "不可上传"
B.
if k<t1 or k>t2:
s="不可上传"
else:
s= "可上传"
C.
if k>=t1:
s= "可上传"
if k<=t2:
s= "可上传"
else:
s="不可上传"
D.
if k<t1:
s= "不可上传"
elif k<=t2:
s= "可上传"
else:
s= "不可上传"
A. A B. B C. C D. D
【答案】4. C 5. D 6. B 7. B 8. C
【解析】
【4题详解】
本题考查的是信息系统的组成与功能。学生的照片、家长上传的照片、请假数据等都属于系统中的数据,因此A选项错误;信息系统中的用户范围很广,如信息系统的使用者、程序设计员、管理人员等,因此B选项错误;家长可通过移动终端APP查看学生的出入校门信息,属于数据查询功能,因此C选项正确;家长用于请假的APP是为了解决请假问题而专门开发的,属于应用软件,因此D选项错误。故选C。
【5题详解】
本题考查的是计算机网络。 学生的出入数据用移动通信网络(4G/5G)传输之外也可以使用无线通信网络等传输,因此A选项错误;除了通过HTTP协议之外,数据的传输要通过基础TCP/IP协议,因此B选项错误;移动终端与服务器不需要处于同一局域网,日常使用中手机APP的使用一般不与服务器处于同一局域网中,因此C选项错误;资源共享是指网络中的软件、硬件、数据资源等能被网络中的所有用户共同使用,家长可以获取学生的出入信息,属于资源共享,因此D选项正确。故选D。
【6题详解】
本题考查的是计算机硬件。①摄像头③电子显示屏④闸机属于硬件②数据库属于软件⑤照片属于数据,因此B选项正确。
【7题详解】
本题考查的是图片数字化。图片存储公式:存储容量=水平像素×垂直像素×颜色位深度(单位:位)。1024×768×24 /8/1024=2304 KB,按9:1压缩:2304÷9=256KB。故选B。
【8题详解】
本题考查的是python选择语句的应用。要求:t1≤k≤t2时提示可上传,否则不可上传。 A、B、D都符合逻辑要求; C不能实现:例如当k < t1时,满足k ≤ t2,程序会将s赋值为“可上传”,但实际k超出范围应该提示不可上传,逻辑错误。故选C。
9. 有如下Python程序段:
s=input()
n=len(s)
i=0
while i<n:
ch=s[i]
if "0"<=ch<="9":
s=ch+s[0:i]+s[i+1:]
i+=1
else:
s=s[0:i]+s[i+1:]+ch
n-=1
print(s)
执行该程序段后,若输出结果为1234abcd,则输入的s不可能为( )
A. ab12cd34 B. abcd4321 C. 43ab21cd D. 4abc3d21
【答案】A
【解析】
【详解】本题考查的是字符串处理。程序规则:数字移到字符串最前面,i+=1,字母移到字符串最末尾,i不变,n-=1。把输入字符串中的数字提到前面并倒序排列,把非数字字符放到后面并保持原顺序。
选项
输入
数字处理顺序
输出数字部分
结论
A
ab12cd34
1→2→3→4
4321×
不可能
B
abcd4321
4→3→2→1
1234√
可能
C
43ab21cd
4→3→2→1
1234√
可能
D
4abc3d21
4→3→2→1
1234√
可能
故本题应选A。
二、非选择题(本大题共2小题,其中第10小题12分,第11小题11分,共23分)
10. 某校搭建了校园智能饮水台监测系统,实现对饮水台出水温度、剩余水量的实时监测和智能调控。智能终端读取传感器的数据,并将水量数据和出水温度通过网络上传至web服务器。当温度低于80℃或水量低于3L时,加热器或水泵启动,同时将提醒信息推送至后勤管理端。后勤人员可以通过浏览器远程查看饮水台的历史监测数据和实时状态。请结合系统设计,回答下列问题:
(1)该系统采用的网络架构是__________(A.B/S架构;B.C/S架构)
(2)下列关于传感与控制技术说法正确的是
A. 传感器、加热器和水泵不能连接在同一智能终端
B. 控制指令只能由智能终端发出
C. 通过控制技术实现水泵的启动
D. 传感器属于信息输出设备
(3)下列关于该系统的说法正确的是 (多选)
A. 数据只能存储在服务器中
B. 加热器和水泵属于该系统的执行器
C. 传感器与智能终端之间的数据是双向传输
D. 智能终端与服务器之间的数据是双向传输
(4)系统正常工作一段时间后,某天后勤人员访问浏览器时,页面显示的实时水温低于80℃,但加热器不工作,检查发现温度传感器无故障,简要说明造成上述问题的原因__________(写出一项)
(5)现将该系统中某天饮水台的数据导出到“result.xlsx”文件中,部分数据如表所示。统计并输出该天提醒信息次数最多的饮水台编号(若有多个则一并输出)。实现上述功能的Python程序如下,请选择合适的代码填入划线处(单选)。
编号
采集时间
出水温度
剩余水量
Y01
2026-03-10 08:00
78
3.23
Y02
2026-03-10 08:00
80
2.53
Y03
2026-03-10 08:00
98
3.6
Y04
2026-03-10 08:00
93
4.89
Y05
2026-03-10 08:00
70
3.16
Y06
2026-03-10 08:00
91
3.84
Y07
2026-03-10 08:00
82
3.32
Y08
2026-03-10 08:00
99
4.63
Y09
2026-03-10 08:00
91
3.84
Y01
2026-03-10 08:00
80
3.34
Y02
2026-03-10 08:00
82
2.61
Y03
2026-03-10 08:00
97
3.75
Y04
2026-03-10 08:00
90
4.53
Y05
2026-03-10 08:00
75
3.22
import pandas as pd
df=pd.read_excel("result.xlsx")
df["是否提醒"]=0 #新增“是否提醒”列
for i in df.index:
t=df.at[i, "出水温度"]
w=df.at[i, "剩余水量"]
if t<80 or w<3:
df.at[i, "是否提醒"]=1
df1=____________________
#对df1进行降序排序并重置索引
df2=df1.sort_values("是否提醒", ascending=False, ignore_index=True)
df3=__________________
print("提醒信息次数最多的是: ")
print(df3.编号)
可供选择的代码有:
A. df.groupby("编号", as_index=False).是否提醒.sum() #分组求和
B. df.groupby("编号", as_index=False).是否提醒.count() #分组计数
C. df1[df1["是否提醒"]==df1["是否提醒"][0]] #筛选
D. df2[df2["是否提醒"]==df2["是否提醒"][0]]
【答案】(1)A (2)C (3)BD
(4)执行器(加热器故障)或智能终端与执行器的连接故障或智能终端或服务器中执行指令部分代码出错
(5) ①. A ②. D
【解析】
【详解】本题考查的是信息系统的搭建。
(1)题干中指出“将水量数据和出水温度通过网络上传至Web服务器”“后勤人员通过浏览器远程查看”,由Web服务器和浏览器可知该系统采用的网络架构是B/S架构。
(2)A.传感器和执行器可以连接在同一智能终端;B.控制指令可以由服务器发出;D.传感器属于信息输入设备。
(3)A.数据可以存放在服务器中,也可以采取云存储等其他方式进行存储;C.传感器与智能终端之间的数据是单向传输。
(4)题干中已明确系统正常工作一段时间,而访问浏览器页面显示的实时水温低于80摄氏度,但执行器不工作,从硬件角度并结合信息系统搭建模型,问题应出现在加框区域,经检查发现传感器无故障,因此问题应该出现在智能终端和执行器之间:例如执行器故障。从软件角度,执行器是根据执行指令执行的,执行指令错误亦会导致执行器无法正常工作。
(5)①在①处的for循环执行完毕后,df中的“是否提醒”列中提醒的为1,未提醒的为0,现在要出统计出每个饮水台的提醒次数,故需要按照“编号”分组并对“是否提醒”列求和,其和为提醒的总次数,计数会错误地把未提醒数据也统计,故①处选A项。
②题干中指出若提醒次数最多饮水台编号有多个的话则一并输出。因此需要对提醒数据进行筛选。选项CD提供的筛选语句中均是与“是否提醒”列的第一条数据进行相等筛选,要求是提醒次数最多的,因此筛选的数据应是经过降序排序df2,而df1是未经排序的。故选D。
11. 为养成良好的储蓄习惯,小项每年按月记录收支情况并制定储蓄计划。每月收支情况存储于文本文件中,如图a所示,其中1月份的记录内容如图b所示。储蓄计划包含基础储蓄和额外储蓄两部分。若某月收入不大于支出,则该月无需储蓄。若某月收入大于支出,将盈余的20%作为基础储蓄;额外储蓄则按如下规则计算:若该月与前一个月均满足收入大于支出,则该月在上一个月的基础上再增加120元。实现该功能的Python程序如下,请回答下列问题:
(1)若收入支出字典为items={0: ["餐饮", "交通", "服饰", "娱乐"],1:[ "工资", "奖金", "其他收入"]},其中0为支出项目,1为收入项目。根据图b所示数据,一月份小项__________存入储蓄资金。
(A.需要/B.不需要)
(2)定义函数save(data),计算出需要存入的储蓄资金,其中列表data依次记录了各月份的支出总和、收入总和(data[0]为1月支出总和,data[1]为1月收入总和,...)
def save(data):
count=0
total=0
for i in range(1,len(data),2):
if data[i-1]<data[i]:
mnow=(data[i]-data[i-1])*0.2+count*120
total+=mnow
① _____
else:
mnow=0
count=0
return total,mnow
(3)定义函数tj (fname, dic, money),功能是计算出每个月的支出与收入总和,其中fname为收支数据文件名、dic为收入支出项目字典。请在划线处填入合适的代码。
def tj (fname, dic, money):
f=open(fname, "r", encoding= "utf-8") #打开文件
line=f.readline().strip() #读取文件中的一行并去除换行符
while line: #当line非空
for i in range(len(line)):
if line[i]== ",":
item=line[0:i]
if ②_____:
money[0]=money[0]+float(line[i+1:]) #money[0]为支出总和
else:
money[1]=money[1]+float(line[i+1:]) #money[1]为收入总和
break
line=f.readline().strip()
return money
(4)主程序如下,加框处代码有误,请修正。
items={0:[ "餐饮", "交通", "服饰", "娱乐"],1:[ "工资", "奖金", "其他收入"]}
month=int(input())
data=[0]*month*2
for i in range(1,month+1):
money=[0,0]
fname=str(i)+ ".txt"
money=tj(fname, items, money)
data[i-1],data[i]=money[0], money[1]
t,m=save(data)
print("本月应存入的储蓄资金: ", m, "元。")
print("已累计存入的储蓄资金: ", t, "元。")
【答案】(1)A (2)count+=1或count=count+1
(3)item in dic[0]
(4)data[2*i-2],data[2*i-1]=money[0],money[1]
【解析】
【详解】本题考查的是数组的综合应用。
(1)由图b可知,小项在一月份的总支出为1020+420+410+360=2210元,总收入为4550+300+150=5000元,一月份总收入大于总支出,需要存入储蓄资金。
(2)由函数功能可知data列表依次记录1月支出、1月收入、2月支出、2月收入、…for i in range(1,len(data),2):中循环变量i是1,3,5,…也就是每个月的“收入”在列表data中的索引位置,则data[i-1]表示某月支出总和,data[i]某月表示收入总和。当条件表达式data[i-1]<data[i]成立时,表示某月的支出总和<收入总和,此时需要进行储蓄计算。再储蓄计算时,语句mnow=(data[i]-data[i-1])*0.2+count*120,这里的(data[i]-data[i-1])*0.2为基础储蓄,count*120是额外储蓄。根据题意“若该月与前一个月均满足收入大于支出,则该月在上一个月的基础上再增加120元。”可知在if分支最后,①处要更新count,使得连续盈余时,当前月能在上一个月的基础上再增加120元,即变量count应该增加1,故①处应填count+=1。
(3)在自定义函数tj中,money[0]是支出总和,money[1]是收入总和。打开文件后,逐行读取文件内容,比如某行line= “餐饮,500”,当条件表达式line[i]== “,”成立时,变量i处在逗号(,)的索引位置,故item=line[0:i]是逗号前的部分,即收入支出项目名称,此时需要判断它属于支出还是收入,并根据结果将该项目的金额累加到对应的总和中。由②处条件判断成立后需要累加到支出总和money[0]可知,②处条件应为item在支出项目列表dic[0]中匹配,故②处应填item in dic[0]。
(4)加框处代码所属for循环的循环变量i从1到month,即表示月份。money列表由自定义函数tj计算得来,money[0]为支出总和,money[1]为收入总和,而data列表要求依次记录了各月份的支出总和、收入总和。则当i=1时,money[0]应赋值给data[0],money[1]应赋值给data[1];当i=2时,money[0]应赋值给data[2],money[1]应赋值给data[3],但此时加框处原代码data[i-1],data[i]对应data[1],data[2],这会覆盖1月份的收入,并且使得月份错位。不难发现,每个月的支出总和在列表data中的位置为偶数索引,收入总和在列表data中的位置为奇数索引,如下表所示。
月份
支出总和
收入总和
1
data[0]
data[1]
2
data[2]
data[3]
3
data[4]
data[5]
…
…
…
i
data[2*i-2]
data[2*i-1]
故加框处代码应修改为:data[2*i-2],data[2*i-1]=money[0],money[1]。
逐行详解
“““定义函数save(data),计算出需要存入的储蓄资金,其中列表 data 依次记录了各月份的支出总和、收入
总和(data[0]为1月支出总和,data[1]为1月收入总和,...)”””
def save(data):
count=0 #连续盈余的月份数,按每年记录时一月份不存在前月,初始值为0
total=0 #累计储蓄,初始值为0
for i in range(1,len(data),2):
if data[i-1]<data[i]: #当支出总和小于收入总和
mnow=(data[i]-data[i-1])*0.2+count*120 #计算某月储蓄=基础储蓄+额外储蓄
total+=mnow #计算累计储蓄
count+=1 #新增一个月满足支出总和<收入总和,当下一个月也满足
#支出总和<收入总和时,下一个月的额外储蓄增加120元
else: #当支出总和不小于收入总和
mnow=0 #本月无需计算储蓄
count=0 #本月未实现盈余,连续盈余的月份数重置为 0
return total,mnow #自定义函数返回累计储蓄total、最后一个月的储蓄资金mnow
“““定义函数tj(fname,dic,money),功能是计算出每个月的支出与收入总和,其中fname为收支数据文件名、dic为收入支出项目字典。”””
def tj(fname,dic,money):
f=open(fname, "r", encoding= "utf-8") #打开文件
line=f.readline().strip() #读取文件中的一行并去除换行符
while line: #当line非空
for i in range(len(line)): #遍历字符串line
if line[i]== ",": #当i位置的字符为逗号时
item=line[0:i] #通过切片得到item为项目名称
if item in dic[0]: #如果item属于支出项目
money[0]=money[0]+float(line[i+1:]) #money[0]为支出总和
else:
money[1]=money[1]+float(line[i+1:]) #money[1]为收入总和
break
line=f.readline().strip() #读取文件中的下一行并去除换行符
return money #自定义函数返回 money 列表
#主程序
items={0:[ "餐饮", "交通", "服饰", "娱乐"],1:[ "工资", "奖金", "其他收入"]}#0支出、1收入
month=int(input()) #输入当前月份
data=[0]*month*2 #创建列表data,每个月需要支出总和、收入总和
for i in range(1,month+1): #循环打开1月份至i月份的收支数据文本文件
money=[0,0] #用于暂存第i月的支出总和、收入总和
fname=str(i)+ ".txt" #fname表示第i月的收支数据文本文件
money=tj(fname,items,money) #调用自定义函数,计算出第i月的支出总和、收入总和
data[2*i-2],data[2*i-1]=money[0],money[1] #将暂存第i月的支出总和、收入
#存入 data[2*i-2],data[2*i-1]
t,m=save(data) #调用自定义函数save,计算出本月需要存入的储蓄资金m,
#和本年度累计存入的储蓄资金t
print("本月应存入的储蓄资金: ", m, "元。") #输出本月需要存入的储蓄资金m
print("已累计存入的储蓄资金: ", t, "元。") #输出本年度累计存入的储蓄资金t
第1页/共1页
学科网(北京)股份有限公司
$