You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何简易字母加密系统输出列表呈升序,不符合预期?

解决简易加密系统的顺序与逻辑问题

你的代码核心问题有两个:

  • 输出顺序错误:你按字母表从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 15:53:13