深耕专业教研,探索前沿技术
信息技术来源:2025学年第二学期北斗星盟高三适应性联考

第 10 题

答案与解析

本题解析

参考答案

A

程序分析

s="Dat15Eb2"
t=k=0 ; i=0 ; flag=True
while i<len(s):
    if flag and "A"<=s[i]<="Z":
        t+=ord(s[i])-ord("A")
        k=0
    elif "0"<=s[i]<="9":
        k=k*10+int(s[i])
    flag=not flag
    i+=1
t+=k

循环用 i 从左到右访问字符串。flag 初值为 True,每轮末尾取反一次,因而访问偶数下标时为 True,访问奇数下标时为 False。

第一个分支要求 flag 为 True 且当前字符为大写字母,满足时把该字母相对 A 的编码差累加到 t,并将 k 清零。elif 只判断当前字符是否为数字,不受 flag 的真假限制;k=k*10+int(s[i]) 将原数值扩大10倍,再加上当前数字,相当于在末尾追加一位数字。其他字符不会改变 t、k。循环结束后,再将保留下来的 k 加到 t 中。

字符串 Dat15Eb2 的下标从0开始。下标0的 D 满足大写字母分支,t 增加 ord("D")-ord("A")=3,k 为0。随后 a、t 不改变这两个变量,数字1、5使 k 依次变为1、15。

E 的下标为5,此轮 flag 为 False,不能进入大写字母分支,因此 k 仍为15;b 也不改变 k。最后的数字2使 k=15×10+2=152。退出循环后执行 t+=k,得到 t=3+152=155。