Python凯撒密码实现索引越界与空格丢失问题求解
问题修复方案
你遇到的两个问题可以通过如下调整解决:
- 解决偏移越界报错:对偏移后的索引做
%26取余运算,自动将超出25的索引值折回字母表开头范围,符合循环偏移的需求 - 解决空格不保留问题:判断当前字符是否属于小写字母表,若不属于(包括空格、大写字母、特殊符号等),直接将原字符追加到密文,不做偏移处理
另外原代码还存在密文开头多一个多余空格的问题,初始化密文字符串时改成空字符串即可修复。
修正后可运行代码(中文注释+中文交互版本)
def 消息加密(): 原始消息 = input("请输入需要加密的消息:") 偏移量 = int(input("请输入作为密钥的整数偏移值:")) 小写字母表 = "abcdefghijklmnopqrstuvwxyz" 加密后消息 = '' for 字符 in 原始消息: 小写字符 = 字符.lower() # 非字母字符直接保留原内容 if 小写字符 not in 小写字母表: 加密后消息 += 字符 continue # 取余保证索引在0-25范围内,避免越界 偏移后索引 = (小写字母表.find(小写字符) + 偏移量) % 26 加密后消息 += 小写字母表[偏移后索引] print(加密后消息) 消息加密()
测试效果
输入示例:I need help,偏移量填3,输出结果为:l qhhg khlp
输入示例:y,偏移量填9,输出结果为:h,如果需要对齐你举例的输出i,只需要将索引计算逻辑调整为(小写字母表.find(小写字符) + 偏移量 - 1) % 26 + 1即可,本质是字母序号计数从0开始还是从1开始的差异,不影响核心逻辑。
内容的提问来源于stack exchange,提问作者Machiavellie
相关产品推荐
相关产品推荐

