深耕专业教研,探索前沿技术
信息技术来源:2026年4月嘉兴市高三教学测试

第 13 题

答案与解析

第(1)小题

参考答案

1

本问按相邻两次实际采集值比较,第一次采集尚无前一次数据。前3次采集均有人,其中相邻位置差值为1.6−1.2=0.4米、2.1−1.6=0.5米,连续两次都大于0.3米,在第3次采集时触发一次开灯。开灯后只要没有检测到无人,灯就保持亮,不重复计算开灯次数。

第4次p=0,立即关灯。第5次重新有人,位置相对上一次的差值为0.5−0=0.5米;第6次的差值为0.7−0.5=0.2米,不满足“大于0.3米”,连续计数中断,不能再次开灯。因此共开灯1次。

第(2)小题

参考答案
  1. s = 0

  2. p[i] == 1 and d > 0.3

  3. pre = pos[i]

程序分析

n =len(p)    # 采集次数
s = 0        # 灯状态:0灭,1亮
c = 0
pre = 0      # 存储上一次位置值
t = 0
for i in range(n):
    if s == 1 and p[i] == 0:
        ...
    elif s == 0:
        ...
    ③

s表示灯的状态,初始为0;pre保存上一次位置,初始为0。循环按i依次处理采集数据:灯亮且无人时进入第一个分支;灯灭时进入elif分支;灯亮且有人时两个分支都不执行,保持亮灯。③位于两个分支之后,每轮都会执行。

if s == 1 and p[i] == 0:
    ①
    c = 0

这一分支对应“灯亮时检测到无人”的情况。①之后的c=0清除此前的计数,避免将关灯前后的检测过程接在一起。

elif s == 0:
    d = abs(pos[i] - pre)
    if ②:
        c += 1
        if c >= 2:
            s = 1
            t += 1
            c = 0
    else:
        c = 0

灯灭时,d记录当前位置与上一次位置之差的绝对值。②成立就使c加1,不成立则由else将c清零,因此c用于累计连续满足开灯检测条件的次数。达到2次时令s=1,并使t加1,t由此记录从灭灯变为亮灯的次数。

此处按原卷缩进,c = 0位于if c >= 2内部,成功开灯后才清零;若将它放在该if外,每次累加后立即清零,便无法累计到2。

填空分析

①

进入该分支时灯亮且检测到无人,应立即将灯状态改为灭。s=0表示灯灭,因此填写s = 0。后面的c=0负责清除连续计数,不能代替灯状态的修改。

②

外层elif已经限定灯灭,当前检测还必须同时满足“有人”和“相邻位置差值大于0.3米”。分别写为p[i] == 1和d > 0.3,用and连接,填写p[i] == 1 and d > 0.3。

不能只判断d:从有人变为无人时,pos变为0,也可能产生较大的位置差,但不能计入开灯条件。差值等于0.3米时也不满足题目要求。

③

本轮差值判断完成后,要把当前位置保存为下一轮的“上一次位置”,填写pre = pos[i]。该句每轮都执行,包括无人和灯亮的情况;这样pre始终对应紧邻的上一次采集,而不是上一次有人或上一次灯灭时的位置。

与第(1)问从两次实际采集开始比较不同,本程序以pre=0作为初始比较基准,首次采集的差值也参与判断:前两次差值分别为1.2米、0.4米,第2次便开灯。第4次关灯,之后未再满足连续两次条件,最终t仍为1。