信息技术来源: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。
问题反馈
解析有疑问或显示异常?请先复制题目信息,再打开反馈表单填写。
题目编号:2026_05_G3_beidouxingmeng_q010
