GESP四级真题双杀:列表映射法,一招打通字符串转换!
大家好,我是老马。
2026年3月和6月的GESP图形化四级考试,接连出现了两道看似不同、实则同源的题目——“凯撒密码”和“小杨的字符转换器”。很多考生走出考场才发现,这两道题的解法几乎是一个模子刻出来的。今天,我就用官方参考答案中的列表映射法,彻底拆解这两个高频考题,帮你抓住GESP四级“字符串处理”板块的核心命脉。
一、什么是字符串映射转换?
无论规则多么花哨,这类题的本质都是把一个字符串中的每个字符,按照特定规则变成另一个字符,最后将所有新字符拼接成结果。整个流程只有三步:
遍历字符串:从头到尾依次取出每个字符。 判断字符类型:根据规则确定当前字符属于哪一类(数字、字母、其他)。 执行映射:对每一类字符应用对应的转换规则,得到新字符。
在Scratch中,这三步的最佳实现工具就是列表——用列表存储映射关系,用“列表中第一个”积木查找位置,再用位置去另一张表或同一张表中取值。这就是官方参考答案的核心思路。
二、查表型映射:字符转换器(2026年6月)


【题目描述】
小杨有一串字符,他想玩一个有趣的转换游戏。规则如下:
如果字符是数字 0 ~ 9,就把它变成对应的字母(0→a, 1→b, 2→c, …, 9→j); 如果字符是字母 a ~ j(不区分大小写,例如 A 和 a 都算作 a),就把它变成对应的数字(a→0, b→1, c→2, …, j→9); 其他字符(如 k~z 的字母、其他符号等)保持不变。
默认小猫角色和白色背景,请你帮小杨编写一个 Scratch 程序,完成这个转换并把结果存储在变量ans中。
【输入描述】
新建变量“s”,表示一个待转换的字符串。
如下图所示:

【输出描述】
新建变量“ans”,用于存储最终的结果,表示转换后的字符串。
如下图所示:

【样例解释】
'a'是字母 a → 对应数字 0 'B'视为字母 b → 对应数字 1 'c'是字母 c → 对应数字 2 '9'是数字 9 → 对应字母 j '8'是数字 8 → 对应字母 i 最终得到 "012ji"
【输入样例】
s= "aBc98"【输出样例】
ans= "012ji"【输入样例】
s = "15#x"【输出样例】
ans = "bf#x"【注意事项】
变量名的拼写(包括大小写)要和题目完全一致。 输入变量直接赋值即可,无需使用“询问并等待”积木块。 输出结果存放在对应变量中即可,无需使用“说…”或“说…,2秒”积木块。
规则回顾
数字0~9 → 字母a~j(0→a, 1→b, …, 9→j) 字母a~j(不区分大小写)→ 数字0~9(a→0, b→1, …, j→9) 其他字符不变
官方解法:双列表交叉映射
准备两张表:
列表“字母表”:依次填入 a, b, c, d, e, f, g, h, i, j(10项)列表“数字表”:依次填入 0, 1, 2, 3, 4, 5, 6, 7, 8, 9(10项)
遍历处理:
用“重复执行”配合“字符串长度”和“第几个字符”积木,依次取出 s中的每个字符ch。用“列表中第一个”积木在“字母表”中查找 ch。由于Scratch字符串比较不区分大小写,大写字母也能匹配到小写字母。如果找到(返回值 > 0),则用该位置作为索引,从“数字表”中取出对应的数字字符,追加到 ans。否则,用同样方法在“数字表”中查找 ch。如果找到,则用该位置从“字母表”中取出对应的字母字符,追加到 ans。如果都不在表中,直接将 ch原样追加到ans。
关键细节:
列表索引从1开始,因此字母 a在字母表中是第1项,对应数字表第1项0;字母b是第2项,对应数字表第2项1……完美对齐。数字字符 '9'在数字表中是第10项,对应字母表第10项'j'。
三、偏移型映射:凯撒密码(2026年3月)


【题目描述】
小杨最近在图书馆发现了一本关于密码学的有趣书籍,里面介绍了一种古老的密码——凯撒密码。这种密码很简单:每个字母都按照字母表的顺序往后移动固定位数。比如移动3位,A就变成D,B变成E,C变成F……到了Z之后又回到A,Z就变成了C。
小杨现在得到了三行重要的信息:
第一行:已知的原始消息(明文) 第二行:已知的加密后的消息(密文),它是用凯撒密码对第一行加密得到的 第三行:需要解密的密文,它和前面使用了相同的移动位数
默认小猫角色和白色背景,请你帮助小杨,先根据前两行计算出字母移动了多少位,然后用这个规律破解第三行的密文,找到原始消息并把结果存储在变量中。
【输入描述】
新建变量“”,表示已知的明文(全大写字母)
新建变量“”,表示对应的密文(全大写字母)
新建变量“”,表示需要破解的密文(全大写字母)
如下图所示:

【输出描述】
新建变量“”,用于存储最终的结果,表示破解后的明文。
如下图所示:

【输入样例】
str1 = ABCDEFGVWXYZstr2 = DEFGHIJYZABCstr = WKHTXLFNEURZQIRAMXPSVRYHUWKHODCBGRJ【输出样例】
ans = THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG【样例解释】
从前两行可以看出:
A → D(向后移动3位) B → E(向后移动3位) 以此类推
所以移动位数是3。对第三行密文,我们把每个字母向前移动3位:
W向前移动3位变成T K向前移动3位变成H 以此类推
最终得到:"THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG"
【输入样例】
str1 = ABCstr2 = DEFstr = JRRG【输出样例】
ans = GOOD【注意事项】
变量名的拼写(包括大小写)要和题目完全一致。 输入变量直接赋值即可,无需使用“询问并等待”积木块。 输出结果存放在对应变量中即可,无需使用“说…”或“说…,2秒”积木块。
规则回顾
每个大写字母向后移动固定位数(循环,Z→A) 已知一组明密文对(str1, str2),求偏移量 用相同偏移量解密另一段密文(str)
官方解法:单列表偏移映射
准备一张表:
列表“字母表”:依次填入 A, B, C, ..., Z(26项,全大写)
第一步:求偏移量
取 str1的第一个字符和str2的第一个字符。用“列表中第一个”在字母表中分别找到它们的位置 pos1和pos2。偏移量 offset = pos2 - pos1(若结果为负数则加26)。例如A在位置1,D在位置4,偏移量 = 3。
第二步:解密 str
初始化 ans为空字符串。遍历 str的每个字符ch:用“列表中第一个”在字母表中找到 ch的位置pos。计算解密后的位置: newPos = pos - offset。如果 newPos < 1,则newPos = newPos + 26(循环到字母表末尾)。从字母表中取出第 newPos项,追加到ans。
关键细节:
解密是加密的逆操作:加密时向后移,解密时向前移,所以用减法。 循环处理只在边界发生(当 pos - offset小于1时加26)。
四、两种方法的本质联系
核心框架完全一致:建表 → 遍历 → 查位置 → 映射 → 拼接。
五、掌握通用框架,一通百通
无论题目如何变化,只要遵循这个框架,就能快速搭建程序:
建表:根据映射规则创建1~2张列表。 遍历:用“重复执行”逐个取出字符。 查位置:用“列表中第一个”找到字符在表中的位置。 映射: 查表型:用位置去另一张表取值。 偏移型:用位置加减偏移量(注意循环)后回同一张表取值。 拼接:将映射结果追加到 ans。
考场三提醒:
列表索引从1开始,不是0。 Scratch字符串比较不区分大小写,但“列表中第一个”查找时大小写字母都能匹配。 变量名必须与题目完全一致( s、ans、str1、str2、str)。
掌握了这个通用框架,无论是字母镜像、反向映射还是混合规则,你都能从容应对。这就是GESP四级“字符串映射转换”类题目的终极解法。
青少年编程竞赛交流
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),👇添加小助手微信,让他邀请大家进入学习群。进群之后大家可以参与定期组织的 #21天刷题打卡、 #GESP编程能力测评、 #电子学会青少年等级考试、 #教育部白名单比赛辅导 以及 #青少年编程组队竞赛 等活动。
