凯撒密码解码返回错误字符,求初学者级代码修复方案
凯撒密码解码错误修复(适合初学者)
你的代码目标是对字符串做凯撒密码解码,偏移量设为-10,但实际输出和预期不符,问题确实出在字符偏移的计算逻辑上。
错误原因
原代码在处理偏移后ASCII值小于97的情况时,直接对ASCII值取模26,这是错误的逻辑。比如密文中的字母f(ASCII 102),偏移-10后得到92,92%26=14,14+97=111(对应o),但正确结果应该是v。正确的做法应该先把字母映射到0-25的范围(a=0,z=25)再计算偏移,这样循环才符合凯撒密码的规则。
修复步骤(适合初学者)
- 把小写字母转换为0-25的索引:用
ord(let) - ord('a'),这样a对应0,z对应25。 - 加上偏移量后对26取模:Python的负数取模会自动得到正的结果,不用额外判断是否小于0。
- 再把索引转换回ASCII值:结果 + ord('a')。
修复后的代码
txt = "xofob qyxxk qsfo iye ez, xofob qyxxk vod iye nygx" def letterschuiven(cha, vsg): for let in cha: lower_let = let.lower() if lower_let.isalpha(): # 转换为0-25的索引 char_index = ord(lower_let) - ord('a') # 计算偏移后的索引,取模26处理循环 new_index = (char_index + vsg) % 26 # 转换回ASCII字符 realans = chr(new_index + ord('a')) print(realans, end="") else: print(let, end="") letterschuiven(txt, -10)
验证结果
运行修复后的代码,会输出预期结果:never gonna give you up, never gonna let you down
内容的提问来源于stack exchange,提问作者SupriseX
相关产品推荐
相关产品推荐

