内容正文:
2025学年第二学期高一年级5月月考
技术学科试题卷
考生须知:
1.本卷满分100分,考试时间90分钟;
2.答题前,在答题卷指定区域填写班级、姓名、考场、座位号及准考证号(填涂);
3.所有答案必须写在答题卷上,写在试卷上无效;
第一部分信息技术(共50分)
一、选择题(本大题共12小题,每小题2分,共24分。每小题列出的四个备选项中只有一个是符合题目要求的,不选、多选、错选均不得分。)
阅读下列材料,完成下面小题
某地水费单价标准如下:
第一档次:每户每月不超过15立方米的用水量,供水单价为2.4元/立方米;
第二档次:每户每月15立方米(不含)到30立方米(含)的用水量,供水单价是第一档的1.5倍;
第三档次:每户每月超过30立方米的用水量,供水单价是第一档的3倍。
1. 下列关于算法的说法,不正确的是( )
A. 算法可以用自然语言描述
B. 解决该问题的算法是唯一的
C. 算法可描述为:①输入月用水量,②根据标准计算费用,③输出计算结果
D. 用price表示单价,vol表示用水量,计算费用cost=price*vol,属于抽象与建模过程
2. 根据水费单价标准,用Python算法控制结构描述各档次的供水单价,设vol为某月的用水量,price为供水单价,price初始值为2.4(单位:元/立方米),下列选项正确的是( )
A.
if vol <=30:
price=price*1.5
else:
price=price*3
B.
if vol <30:
price=price*1.5
else:
price=price*3
C.
if vol >30:
price=price*3
elif vol>15:
price=price*1.5
D.
if vol >=30:
price=price*3
elif vol >=15
price=price*1.5
A. A B. B C. C D. D
3. 下列Python表达式中值最大的是( )
A. abs(int(-5.6)) B. 9 % 2 + 3 C. len(str(6)) D. 2 ** 5 % 7
4. 某超市部分商品信息用Python存储在字典info中,info={"蔬菜":["青菜","黄瓜","萝卜"],"水产":["鲫鱼","明虾","青蟹"],"水果":["西瓜","苹果","香蕉"]},若要将“明虾”改为“河虾”,则正确的语句是( )
A. info[1]["明虾"] = "河虾" B. info["水产"][1] = "河虾"
C. info["水产"]["明虾"] ="河虾" D. info[1][1] = "河虾"
某算法的部分流程图如图所示,完成下面小题
5. 该流程图中包含的算法的控制结构有( )
A. 顺序结构、分支结构 B. 顺序结构、循环结构
C. 分支结构、循环结构 D. 顺序结构、分支结构、循环结构
6. 执行这部分流程,若输入n的值为10,则输出k的值是( )
A. 5 B. 6 C. 9 D. 10
7. 有如下Python程序段:
a = [1,2,6,3,3,6,5]
p = 0
for i in range(1, len(a)):
if a[i] >= a[p]:
p = i
执行该程序段后,p的值是( )
A. 1 B. 2 C. 5 D. 6
8. 有如下Python程序段:
c = 0
for i in range(2, 11):
f = True
for j in range(2, i):
if i % j = = 0:
f = False
break
if f = = True:
c += 1
执行该程序段后,c 的值是( )
A. 4 B. 5 C. 6 D. 7
9. 列表IDlist存储了某校所有学生身份证号码,如要分别统计1-12月份出生的人数,Python程序代码如下:
count=[0]*12
for i in :
mon= int(i[10:12])#从身份证中提取月份
for i in range(12):
print(i+1,"月份人数为",count[i])
为实现上述功能,划线处自上而下依次填入的代码是:
①IDlist ②range(len(IDlist)) ③count[mon-1]+=1 ④count[mon]+=1代码顺序正确的是( )
A. ②③ B. ②④ C. ①④ D. ①③
10. 某地车辆限行规则如下:按机动车牌最后一位阿拉伯数字,实行“单日单号、双日双号”通行。如车牌号“浙A1236H”的最后一位阿拉伯数字为“6”,则只可在双日出行。输入车牌号码,能正确输出其可通行日的程序段如下:
s=input("请输入车牌号码:")
for i in range( ① ):
if "0" <= s[i] <= "9":
if ② :
print("单日通行")
else:
print("双日通行")
break
划线处自上而下依次填入的代码是:( )
A. ① 0, len(s), 1 ② int(s[i]) % 2 = = 1 B. ① 0, len(s), 1 ② int(s[i]) % 2 != 1
C. ① len(s)-1, -1, -1 ② int(s[i]) % 2 = = 1 D. ① len(s)-1, -1, -1 ② int(s[i]) % 2 != 1
11. 有如下 Python 程序段:
a = [4,3,1,2,3]
m = a[0]; s = 0
for i in range(1,len(a)):
if a[i] < m :
m = a[i]
s = s + m
执行该程序段后,s的值是( )
A. 1 B. 4 C. 6 D. 9
12. 有如下Python程序段:
ans = ""
a = [1,2,3]
for i in range(len(s)):
ch = s[i]
key = a[i % 3]
if "a" <= ch <= "z":
ans = ans + chr(ord(ch) + key)
else:
ans = chr(ord(ch) - key) + ans
若s的值为“1a5d”,执行该程序段后,ans的值是( )
A. "0c2e" B. "20ce" C. "1b3d" D. "31bd"
二、非选择题(本大题共3小题,其中第13小题8分,第14小题8分,第15小题10分,共26分)
13. 某社交平台需要实现一个敏感词检测功能。读取用户输入的一段文字,检测文字中是否包含敏感词列表中的词汇,检测规则如图(a)所示,根据检测到敏感词的数量,输出不同等级的审核结果,如图(b)所示。
规则
说明
文字长度超过50
+1分
包含一个严重敏感词
+10分
包含一个轻度敏感词
+3分
包含一个特殊符号
+1分
图(a)
总分
审核结果
<10分
安全通过
10~19分
风险等级I
20~29分
风险等级Ⅱ
≥30分
风险等级Ⅲ
图(b)
(1)若输入文字长度超过50,包含1个严重敏感词、2个轻度敏感词、3个特殊符号,则对应的审核结果是_______(单选,填字母)( )
A. 安全通过 B. 风险等级I C. 风险等级II D. 风险等级III
(2)实现上述功能的部分Python程序如下所示,请在划线处填入合适的代码。
level=["安全通过","风险等级I","风险等级II","风险等级III"]
#读取用户输入的文字text,代码略。
#严重敏感词库、轻度敏感词库、特殊符号库分别存储在列表serious、light、special中。
if①____:
s = 0
else:
s = 1
#统计严重敏感词分数
for word in serious:
#计算word在text中出现的数量num,代码略。
②____
#统计轻度敏感词分数累加到s中,代码略。
#统计特殊符号分数累加到s中,代码略。
if s >= 40:
s = 30
result =③____
#输出对应的审核结果 result,代码略。
14. 一个数据低谷段有如下特点:段内的数据均小于阈值th,连续小于th的数据同属于一个低谷段。如th为35时,如图所示的数据序列中共有3个数据低谷段。
现找出数据序列中长度大于length的所有低谷段,并统计这些低谷段长度的总和。
(1)实现上述功能的部分Python程序如下所示,请在划线处填入合适的代码。
#读取数据序列data,阈值th和长度length,代码略。
①____
left = -1
for i in range(len(data)):
if left = = -1:
if data[i] < th:
②____
elif data[i] >= th:
n = i - left
left = -1
if n > length:
cnt += n
if③____and i - left + 1 > length:
cnt += i - left + 1
输出低谷段长度总和cnt,代码略。
(2)如图所示的数据序列,设th = 35, length = 1, 若删除加框处的代码,上述程序输出cnt的值是_________。
15. 某APP为增加用户活跃度,采用“签到得积分换奖品”的形式来吸引用户。签到积分的规则如下:第一天签到得1分,第二天签到得2分,第三天签到得3分,……第7天及7天以上签到得7分;一旦中途漏签,签到积分从1分开始重新计算。现在用“1”和“0”表示签到和未签到,如某用户下载APP后第一天到第九天的签到记录为“101111011”,则这9天共获得14个积分。
(1)若第1天到到第10天的签到记录为“1011101111”,则这10天共获得积分为______。
(2)编写函数cal计算签到积分,请在划线处填入合适的代码。
def cal(s):
total, pre = 0, 0
for i in range(len(s)):
if s[i] = = "1":
if pre < 7:
pre += 1
total += pre
else:
pre = 0
return ________
(3)2026年这一年小明从1月1日开始签到,编写函数select找到连续签到次数最多的那一天,返回对应的月份和日期,如果有多个,返回第一个,请在划线处填入合适的代码。
def select(s):
s = s + "."
month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
result = ""
cnt, maxlen, idx = 0, 0, 0
for i in range(len(s)):
if s[i] = = "1":
①____
else:
if cnt > maxlen:
maxlen = cnt
②____
cnt = 0
k = 0
day = idx + 1
while③____:
day = day-month[k]
k = k + 1
result = str(k+1) + "月" + str(day) + "日"
return result
第1页/共1页
学科网(北京)股份有限公司
$
2025学年第二学期高一年级5月月考
技术学科试题卷
考生须知:
1.本卷满分100分,考试时间90分钟;
2.答题前,在答题卷指定区域填写班级、姓名、考场、座位号及准考证号(填涂);
3.所有答案必须写在答题卷上,写在试卷上无效;
第一部分信息技术(共50分)
一、选择题(本大题共12小题,每小题2分,共24分。每小题列出的四个备选项中只有一个是符合题目要求的,不选、多选、错选均不得分。)
阅读下列材料,完成下面小题
某地水费单价标准如下:
第一档次:每户每月不超过15立方米的用水量,供水单价为2.4元/立方米;
第二档次:每户每月15立方米(不含)到30立方米(含)的用水量,供水单价是第一档的1.5倍;
第三档次:每户每月超过30立方米的用水量,供水单价是第一档的3倍。
1. 下列关于算法的说法,不正确的是( )
A. 算法可以用自然语言描述
B. 解决该问题的算法是唯一的
C. 算法可描述为:①输入月用水量,②根据标准计算费用,③输出计算结果
D. 用price表示单价,vol表示用水量,计算费用cost=price*vol,属于抽象与建模过程
2. 根据水费单价标准,用Python算法控制结构描述各档次的供水单价,设vol为某月的用水量,price为供水单价,price初始值为2.4(单位:元/立方米),下列选项正确的是( )
A.
if vol <=30:
price=price*1.5
else:
price=price*3
B.
if vol <30:
price=price*1.5
else:
price=price*3
C.
if vol >30:
price=price*3
elif vol>15:
price=price*1.5
D.
if vol >=30:
price=price*3
elif vol >=15
price=price*1.5
A. A B. B C. C D. D
【答案】1. B 2. C
【解析】
【1题详解】
本题考查的是算法。A选项:算法可以用自然语言、流程图、程序代码等多种方式描述,表述正确。B选项:解决同一个问题的算法不是唯一的,可以有多种不同实现,该表述错误。C选项:水费计算的算法可以按照"输入用水量→按规则计算费用→输出结果"的步骤描述,表述正确。D选项:抽象出变量、推导计算公式属于问题分析阶段的抽象与建模过程,表述正确。故本题应选B。
【2题详解】
本题考查的是分支语句的应用。根据题意,分档规则为:①第一档:vol≤15,单价price=2.4(题目已设price初始为2.4);②第二档:15< vol≤30,单价乘1.5;③第三档:vol>30,单价乘3。A、B选项:都会把第一档(vol≤15)的错误修改单价为1.5倍,逻辑错误。 C选项:先判断 vol>30,符合第三档规则;否则判断vol>15,即满足15< vol≤30 符合第二档规则。D选项:将属于第二档的 vol=30错误归为第三档,逻辑错误。故本题应选C。
3. 下列Python表达式中值最大的是( )
A. abs(int(-5.6)) B. 9 % 2 + 3 C. len(str(6)) D. 2 ** 5 % 7
【答案】A
【解析】
【详解】本题考查Python内置函数与基本运算符的使用。第一个表达式abs(int(-5.6)),int()对-5.6向0取整得到-5,abs()求绝对值得到结果5;第二个表达式9 % 2 + 3,先计算取模9%2得1,再加3得到结果4;第三个表达式len(str(6)),将整数6转换为字符串后长度为1,结果为1;第四个表达式2 ** 5 % 7,先计算2的5次方得到32,32对7取模得到结果4。对比四个结果,第一个表达式的值最大,对应编号1的选项。故答案为:A。
4. 某超市部分商品信息用Python存储在字典info中,info={"蔬菜":["青菜","黄瓜","萝卜"],"水产":["鲫鱼","明虾","青蟹"],"水果":["西瓜","苹果","香蕉"]},若要将“明虾”改为“河虾”,则正确的语句是( )
A. info[1]["明虾"] = "河虾" B. info["水产"][1] = "河虾"
C. info["水产"]["明虾"] ="河虾" D. info[1][1] = "河虾"
【答案】B
【解析】
【详解】本题考查Python中字典与列表的索引访问及元素修改操作。首先分析info的数据结构:info是字典,键为商品分类字符串,对应的值是存储具体商品的列表;明虾位于"水产"键对应的列表中,Python列表索引从0开始,"水产"列表中元素顺序是鲫鱼(索引0)、明虾(索引1)、青蟹(索引2),修改该位置元素需要先通过字典键获取对应列表,再修改对应索引位置的值。第一个选项错误,字典不能通过整数索引1访问元素,结构不符合;第二个选项符合访问修改规则,是正确的;第三个选项错误,info["水产"]是列表,不能用字符串"明虾"作为列表索引;第四个选项错误,字典info不存在整数键1,无法对应访问到水产分类。故答案为:B。
某算法的部分流程图如图所示,完成下面小题
5. 该流程图中包含的算法的控制结构有( )
A. 顺序结构、分支结构 B. 顺序结构、循环结构
C. 分支结构、循环结构 D. 顺序结构、分支结构、循环结构
6. 执行这部分流程,若输入n的值为10,则输出k的值是( )
A. 5 B. 6 C. 9 D. 10
【答案】5. D 6. B
【解析】
【5题详解】
本题考查算法的基本控制结构。算法的三种基本控制结构中,该流程图从上到下依次执行步骤,包含顺序结构;两个判断框会根据条件选择不同执行分支,包含分支结构;当满足n不等于1的条件时会重复执行循环体部分,包含循环结构,因此三种控制结构都存在。故选D。
【6题详解】
本题考查流程图执行过程。输入n为10,初始k=0。
n=10≠1,n是偶数,更新n为10//2=5,k变为0+1=1
n=5≠1,n是奇数,更新n为3*5+1=16,k变为1+1=2
n=16≠1,n是偶数,更新n为16//2=8,k变为2+1=3
n=8≠1,n是偶数,更新n为8//2=4,k变为3+1=4
n=4≠1,n是偶数,更新n为4//2=2,k变为4+1=5
n=2≠1,n是偶数,更新n为2//2=1,k变为5+1=6
此时判断n等于1,退出循环,输出k=6。故答案为:B
7. 有如下Python程序段:
a = [1,2,6,3,3,6,5]
p = 0
for i in range(1, len(a)):
if a[i] >= a[p]:
p = i
执行该程序段后,p的值是( )
A. 1 B. 2 C. 5 D. 6
【答案】C
【解析】
【详解】本题考查Python循环程序的执行逻辑与列表索引操作。初始状态下,列表a为[1,2,6,3,3,6,5],p初始值为0,循环变量i依次取1到6遍历列表,每当当前位置元素大于等于p位置的元素时,就将p更新为当前i。
i=1时,a[1]=2大于等于a[0]=1,p更新为1;
i=2时,a[2]=6大于等于a[1]=2,p更新为2;
i=3时,a[3]=3小于6,不更新;
i=4时,a[4]=3小于6,不更新;
i=5时,a[5]=6大于等于6,满足条件,p更新为5;i=6时,a[6]=5小于6,不更新。循环结束后p的值为5。故答案为:C。
8. 有如下Python程序段:
c = 0
for i in range(2, 11):
f = True
for j in range(2, i):
if i % j = = 0:
f = False
break
if f = = True:
c += 1
执行该程序段后,c 的值是( )
A. 4 B. 5 C. 6 D. 7
【答案】A
【解析】
【详解】本题考查Python程序的循环执行与结果分析,核心是质数判断的逻辑。该程序功能是统计2到10范围内的质数个数,由于Python的range是左闭右开区间,range(2, 11)中i的取值为2、3、4、5、6、7、8、9、10,质数指大于1的自然数中,除了1和自身外没有其他正因数的数。逐个判断每个i的情况:i=2时,内层循环range(2,2)没有可遍历的元素,不执行循环,f保持True,计数加1;i=3时,内层j仅取2,3不能被2整除,f保持True,计数加1;i=4能被2整除,f变为False,不计数;i=5不能被2、3、4整除,f保持True,计数加1;i=6能被2整除,不计数;i=7不能被2到6的任意数整除,计数加1;i=8能被2整除、i=9能被3整除、i=10能被2整除,都不计数。最终统计得到c的值为4。故答案为:A。
9. 列表IDlist存储了某校所有学生身份证号码,如要分别统计1-12月份出生的人数,Python程序代码如下:
count=[0]*12
for i in :
mon= int(i[10:12])#从身份证中提取月份
for i in range(12):
print(i+1,"月份人数为",count[i])
为实现上述功能,划线处自上而下依次填入的代码是:
①IDlist ②range(len(IDlist)) ③count[mon-1]+=1 ④count[mon]+=1代码顺序正确的是( )
A. ②③ B. ②④ C. ①④ D. ①③
【答案】D
【解析】
【详解】本题考查循环语句。分析代码可知,外层循环需要遍历所有身份证号码,因此第一个空应填入①IDlist。提取月份后,需要在count列表中对应位置加1,由于月份范围是1-12,而列表索引从0开始,所以应使用count[mon-1] += 1,即第二个空填入③。因此,本题选择D选项。
10. 某地车辆限行规则如下:按机动车牌最后一位阿拉伯数字,实行“单日单号、双日双号”通行。如车牌号“浙A1236H”的最后一位阿拉伯数字为“6”,则只可在双日出行。输入车牌号码,能正确输出其可通行日的程序段如下:
s=input("请输入车牌号码:")
for i in range( ① ):
if "0" <= s[i] <= "9":
if ② :
print("单日通行")
else:
print("双日通行")
break
划线处自上而下依次填入的代码是:( )
A. ① 0, len(s), 1 ② int(s[i]) % 2 = = 1 B. ① 0, len(s), 1 ② int(s[i]) % 2 != 1
C. ① len(s)-1, -1, -1 ② int(s[i]) % 2 = = 1 D. ① len(s)-1, -1, -1 ② int(s[i]) % 2 != 1
【答案】C
【解析】
【详解】本题考查Python的字符串遍历逻辑与条件判断。要获取车牌号码的最后一位阿拉伯数字,需要从字符串末尾向前遍历,找到的第一个数字就是我们需要的最后一位阿拉伯数字,因此range的参数应该为起点len(s)-1、终点-1、步长-1,由此可以排除前两个选项。根据限行规则,单号即奇数允许单日通行,判断当前数字为奇数的条件是int(s[i]) % 2 == 1,满足该条件就输出单日通行,对应第三个选项。故答案为:C。
11. 有如下 Python 程序段:
a = [4,3,1,2,3]
m = a[0]; s = 0
for i in range(1,len(a)):
if a[i] < m :
m = a[i]
s = s + m
执行该程序段后,s的值是( )
A. 1 B. 4 C. 6 D. 9
【答案】C
【解析】
【详解】本题考查Python程序执行逻辑分析,涉及列表遍历、条件判断与变量更新。程序初始状态为a = [4,3,1,2,3],初始m取值为4,s初始值为0,循环一共执行4次,i分别取1、2、3、4。第一次循环:a[i]为3,小于当前的m,更新m为3,s累加m后得到s=3;第二次循环:a[i]为1,小于当前的m,更新m为1,s累加后得到s=4;第三次循环:a[i]为2,不小于当前的m,m保持不变,s累加后得到s=5;第四次循环:a[i]为3,不小于当前的m,m保持不变,s累加后得到s=6,最终s的值为6,对应题目第三个选项。故答案为:C。
12. 有如下Python程序段:
ans = ""
a = [1,2,3]
for i in range(len(s)):
ch = s[i]
key = a[i % 3]
if "a" <= ch <= "z":
ans = ans + chr(ord(ch) + key)
else:
ans = chr(ord(ch) - key) + ans
若s的值为“1a5d”,执行该程序段后,ans的值是( )
A. "0c2e" B. "20ce" C. "1b3d" D. "31bd"
【答案】B
【解析】
【详解】本题考查Python程序的执行流程和字符编码的基本操作。已知s的值为"1a5d",长度为4,循环变量i依次取0、1、2、3:
i=0时,ch为'1',key=a[0%3]=a[0]=1,'1'不是小写字母,执行else分支,ans = chr(ord('1')-1) + 空串,此时ans为"0";
i=1时,ch为'a',key=a[1%3]=a[1]=2,'a'是小写字母,执行if分支,ans = "0" + chr(ord('a')+2),此时ans为"0c";
i=2时,ch为'5',key=a[2%3]=a[2]=3,'5'不是小写字母,执行else分支,ans = chr(ord('5')-3) + "0c",此时ans为"20c";
i=3时,ch为'd',key=a[3%3]=a[0]=1,'d'是小写字母,执行if分支,ans = "20c" + chr(ord('d')+1),最终得到ans为"20ce",对应题目第二个选项。故答案为:B。
二、非选择题(本大题共3小题,其中第13小题8分,第14小题8分,第15小题10分,共26分)
13. 某社交平台需要实现一个敏感词检测功能。读取用户输入的一段文字,检测文字中是否包含敏感词列表中的词汇,检测规则如图(a)所示,根据检测到敏感词的数量,输出不同等级的审核结果,如图(b)所示。
规则
说明
文字长度超过50
+1分
包含一个严重敏感词
+10分
包含一个轻度敏感词
+3分
包含一个特殊符号
+1分
图(a)
总分
审核结果
<10分
安全通过
10~19分
风险等级I
20~29分
风险等级Ⅱ
≥30分
风险等级Ⅲ
图(b)
(1)若输入文字长度超过50,包含1个严重敏感词、2个轻度敏感词、3个特殊符号,则对应的审核结果是_______(单选,填字母)( )
A. 安全通过 B. 风险等级I C. 风险等级II D. 风险等级III
(2)实现上述功能的部分Python程序如下所示,请在划线处填入合适的代码。
level=["安全通过","风险等级I","风险等级II","风险等级III"]
#读取用户输入的文字text,代码略。
#严重敏感词库、轻度敏感词库、特殊符号库分别存储在列表serious、light、special中。
if①____:
s = 0
else:
s = 1
#统计严重敏感词分数
for word in serious:
#计算word在text中出现的数量num,代码略。
②____
#统计轻度敏感词分数累加到s中,代码略。
#统计特殊符号分数累加到s中,代码略。
if s >= 40:
s = 30
result =③____
#输出对应的审核结果 result,代码略。
【答案】(1)C (2) ①. len(text)<=50 ②. s+=num*10 ③. level[s//10]
【解析】
【小问1详解】
本题考查的是规则理解。根据规则计算总分:
文字长度超过50:加1分
1个严重敏感词:1×10=10分
2个轻度敏感词:2×3=6分
3个特殊符号:3×1=3分
总分:1+10+6+3=20分,对应规则中20~29分 → 风险等级II,因此选C。
【小问2详解】
本题考查的是字符串处理。① 代码逻辑:不超过50字时初始总分s=0,超过50字时s=1,因此判断条件为文字长度小于等于50,即len(text) <= 50。② 统计严重敏感词分数:每个严重敏感词出现1次加10分,出现num次累加num*10到总分s中,因此填s += num * 10。③ 匹配审核结果:level列表下标和分数区间正好对应:s//10(整数除法)的结果正好是对应结果的下标: <10分 → 0 → 安全通过,10~19 →1→风险等级I,20~29→2→风险等级II,≥30→3→风险等级III,代码中已经将≥40的分数统一设为30,因此直接取level[s//10]即可。
14. 一个数据低谷段有如下特点:段内的数据均小于阈值th,连续小于th的数据同属于一个低谷段。如th为35时,如图所示的数据序列中共有3个数据低谷段。
现找出数据序列中长度大于length的所有低谷段,并统计这些低谷段长度的总和。
(1)实现上述功能的部分Python程序如下所示,请在划线处填入合适的代码。
#读取数据序列data,阈值th和长度length,代码略。
①____
left = -1
for i in range(len(data)):
if left = = -1:
if data[i] < th:
②____
elif data[i] >= th:
n = i - left
left = -1
if n > length:
cnt += n
if③____and i - left + 1 > length:
cnt += i - left + 1
输出低谷段长度总和cnt,代码略。
(2)如图所示的数据序列,设th = 35, length = 1, 若删除加框处的代码,上述程序输出cnt的值是_________。
【答案】(1) ①. cnt=0 ②. left=i ③. left!=-1或其它等价答案
(2)5
【解析】
【详解】本题考查Python程序的算法理解与分段统计逻辑的应用。
(1)①处程序需要统计符合条件的低谷段长度总和,需要先初始化总和变量cnt,因此填入cnt=0;②处当检测到新低谷段开始时,需要将当前下标记录为低谷段的起始位置,因此填入left=i;③处该段代码用于处理整个数据序列遍历结束后,末尾仍为未统计的低谷段的情况,因此判断条件为left!=-1。
(2)题目中th=35时,图中数据三个低谷段长度依次是2、3、2,删除加框的处理末尾低谷段的代码后,仅能统计前两个低谷段,总和为2+3=5,输出结果为5。
15. 某APP为增加用户活跃度,采用“签到得积分换奖品”的形式来吸引用户。签到积分的规则如下:第一天签到得1分,第二天签到得2分,第三天签到得3分,……第7天及7天以上签到得7分;一旦中途漏签,签到积分从1分开始重新计算。现在用“1”和“0”表示签到和未签到,如某用户下载APP后第一天到第九天的签到记录为“101111011”,则这9天共获得14个积分。
(1)若第1天到到第10天的签到记录为“1011101111”,则这10天共获得积分为______。
(2)编写函数cal计算签到积分,请在划线处填入合适的代码。
def cal(s):
total, pre = 0, 0
for i in range(len(s)):
if s[i] = = "1":
if pre < 7:
pre += 1
total += pre
else:
pre = 0
return ________
(3)2026年这一年小明从1月1日开始签到,编写函数select找到连续签到次数最多的那一天,返回对应的月份和日期,如果有多个,返回第一个,请在划线处填入合适的代码。
def select(s):
s = s + "."
month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
result = ""
cnt, maxlen, idx = 0, 0, 0
for i in range(len(s)):
if s[i] = = "1":
①____
else:
if cnt > maxlen:
maxlen = cnt
②____
cnt = 0
k = 0
day = idx + 1
while③____:
day = day-month[k]
k = k + 1
result = str(k+1) + "月" + str(day) + "日"
return result
【答案】(1)17 (2)total
(3) ①. cnt+=1 ②. idx=i-1 ③. day>month[k]
【解析】
【详解】本题考查Python程序设计中的遍历逻辑、条件分支处理与日期计算的应用能力。
(1)签到记录1011101111按连续签到分段计算:第一段1个签到得1分,漏签后连续天数清零;第二段3个连续签到得1+2+3=6分,再次漏签后清零;第三段4个连续签到得1+2+3+4=10分,总加和为1+6+10=17。
(2)函数需要返回计算得到的总签到积分,变量total存储总积分结果,因此第二个空填写total。
(3)①处当遍历到签到字符时,需要给当前连续签到计数加1,因此填写cnt+=1;②处当当前连续签到长度超过历史最长长度时,更新最大长度后需要记录最长连续段最后一天的索引,当前遍历位置i是未签到位置,最后一个签到位置为i-1,因此填写idx=i-1;③处计算月份和日期时,需要不断减去前面月份的天数,直到剩余天数不超过当前月份的天数,因此循环条件为day>month[k]。
第1页/共1页
学科网(北京)股份有限公司
$