为何简易字母加密系统输出列表呈升序,不符合预期?
解决简易加密系统的顺序与逻辑问题
你的代码核心问题有两个:
- 输出顺序错误:你按字母表从a到z的顺序统计每个字母的出现次数,再批量添加对应数字,导致输出列表按字母顺序排列,完全忽略了输入字符串的原始字符顺序。比如输入"aaazzz"时,会先把所有a对应的1加入列表,再添加z对应的26,所以得到
[1,1,1,26,26,26]。 - 加密逻辑与预期相反:当前逻辑是
a→1、z→26,但你预期的是a→26、z→1,两者映射关系完全相反。
另外,逐个定义a='a'、b='b'这类变量属于冗余操作,Python可以直接通过字符本身或ord()函数处理字母与数值的映射。
解决方案
正确的思路是遍历输入字符串的每一个字符,逐个转换为对应的加密数字,这样既能保持输入的原始顺序,又能实现预期的加密逻辑。
修改后的代码:
numlist = [] s = input("input your sentence: ") for char in s: # 计算加密值:a对应26,b对应25...z对应1 encrypted_num = 27 - (ord(char) - ord('a') + 1) numlist.append(encrypted_num) print(numlist)
代码解释
ord(char)获取字符的ASCII码值,ord('a')等于97,因此ord(char) - ord('a') + 1会得到a→1、b→2...z→26的基础映射值。- 用
27 - 基础映射值即可得到a→26、b→25...z→1的预期加密结果。 - 遍历输入字符串的每个字符并逐个添加加密值,完美保留输入的原始顺序。
测试输入"aaazzz",输出结果为[26, 26, 26, 1, 1, 1],完全符合预期。
关于你之前用字母表字符串加in函数的尝试,问题出在你遍历了字母表的所有字符,而非输入字符串的字符,导致不管输入内容是什么,都按顺序添加了1到26的数值。只要调整为遍历输入的每个字符,就能解决这个问题。
内容的提问来源于stack exchange,提问作者Suchiiswar Paudmanabhan
相关产品推荐
相关产品推荐

