浙江高中技术 · 每一道题,认真读懂
信息技术2026年1月浙江选考

第 14 题

其它算法 · Python基础知识

答案与解析

第(1)小题

参考答案

2

发送必须同时满足两个条件:当前状态码连续出现3次,且与最近已发送的状态码不同。每次发送后,要立即更新“最近已发送状态码”,不能始终与初始值1比较。

序列位置 连续状态码段 本段开始时最近已发送状态码 发送情况 本段结束时最近已发送状态码
1~3 0,0,0 1 第3个0出现时发送0 0
4 2 0 只连续出现1次,不发送 0
5~6 0,0 0 连续不足3次,且与最近已发送码相同,不发送 0
7~9 1,1,1 0 第3个1出现时发送1 1
10 0 1 只连续出现1次,不发送 1

位置4的2已中断前面的连续0,位置5~6的两个0不能与位置1~3的0累计。两次发送分别发生在位置3、9,故发送次数为2。

第(2)小题

参考答案
  1. code=0

  2. code != sent

  3. cnt+=1

程序分析

sent=last =-1
#获取k值,代码略
while True:
    #获取温度数据保存到变量t中,代码略
    ...

sent和last初值均为-1,而合法状态码只有0、1、2,因此-1可表示尚无状态记录。程序每轮获取温度后生成状态码,按条件判断是否发送,再更新本轮记录,延时后继续下一轮。

①
if t>=35:
    code = 2
elif t > 15:
    code = 1

已知分支分别处理t≥35和15<t<35两种情况;t≤15时,两个分支均不执行。

if ②:
    if code != last:
        cnt = 1
    else:
        ③
    if cnt == k:
        #发送状态码code,代码略
        sent = code

空②控制计数和发送判断。进入该分支后,code与last不同时执行cnt=1,相同时执行空③;cnt达到k时发送code,并令sent=code。因此sent保存最近一次实际发送的状态码。

last = code
#延时1分钟,代码略

last=code位于空②控制的分支之外,每轮都会执行。因此下一轮使用last时,它保存的是上一轮生成的状态码,可用于判断当前连续段是否中断。

填空分析

①

题干规定t≤15时状态码为0,应在温度分支之前设置默认值:

code=0

该赋值在循环内每轮执行,避免低温时沿用上一轮的状态码。t=15时保留0;t=35时由已有分支覆盖为2。

②

只有当前状态码与最近已发送码不同,才需要进入计数和发送判断,故填:

code != sent

不能用code != last代替:连续出现相同状态码时,仍需累计次数,而last只记录上一轮生成值。

③

进入else说明code与上一轮相同,应将连续次数加1:

cnt+=1

首次循环时,合法状态码与last的初值-1不同,会先执行cnt=1。若因code等于sent而跳过计数,last仍更新;之后遇到不同于sent的新状态码时,连续段从1重新计数。