Python实现Caesar Cipher凯撒密码时字符串下标越界如何解决
凯撒密码下标越界问题修复方案
核心原理
要实现字母表循环偏移,直接使用**取模运算(%)**即可,对字母表长度26取模后,偏移后的计算结果会自动落在0~25的合法下标范围内,天然实现Z之后接A的循环效果。
修正后代码
plain_text = 'PYTHON' cipher_text = '' alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' key = 2 for i in range(len(plain_text)): symbol = plain_text[i] # 内层循环变量改名,避免和外层i冲突导致逻辑错误 for j in range(len(alphabet)): if symbol == alphabet[j]: # 新增取模运算,保证下标不越界 new_symbol = alphabet[(j + key) % len(alphabet)] cipher_text = cipher_text + new_symbol print(cipher_text)
关键修改说明
- 偏移下标计算增加取模逻辑:
(j + key) % len(alphabet),举个例子,字母Z对应下标25,key=2时(25+2)%26=1,刚好对应字母B,符合循环偏移的需求,不会再出现下标越界错误。 - 修复了原代码隐含的变量名冲突问题:原代码内外两层循环都使用变量
i,会导致外层循环的计数被内层循环意外覆盖,将内层循环变量改为j避免这类隐藏BUG。
内容的提问来源于stack exchange,提问作者python noobie
相关产品推荐
相关产品推荐

