Python编写替换密码(substitution cypher)时无法编码报错求助
报错触发原因
- 函数参数传递顺序错误:定义
encode时参数顺序为(key, alpha),实际调用时传入的是(plain, key),导致函数内的形参alpha接收的是用户输入的明文,形参key接收的是预设的密钥字符串,参数完全错位。 - 索引查找逻辑错误:预设的
alpha列表全为大写字母,代码中使用k.lower()将待查找字符转为小写,大写列表中不存在小写字符,直接触发ValueError报错。 - 核心编码逻辑偏差:替换密码需要遍历明文字符,找到每个字符在字母表中的索引,再取密钥相同索引的字符作为密文,现有逻辑完全没有实现该流程。
修复后可正常运行的代码
alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" key = "XPMGTDHLYONZBWEARKJUFSCIQV" print("secret decoder menu") def encode(plain_text, alpha, key): result = [] # 统一转大写匹配字母表规则 for char in plain_text.upper(): if char in alpha: # 匹配明文字符在字母表的索引,取密钥对应位置字符 idx = alpha.index(char) result.append(key[idx]) else: # 非字母字符可直接保留,可根据需求调整 result.append(char) return ''.join(result) plain = input("text to be encoded: ") print(encode(plain, alpha, key))
补充说明
如果需要实现解码功能,反向逻辑即可:对密文字符找到其在密钥中的索引,取字母表对应位置的字符就能得到原始明文。
内容的提问来源于stack exchange,提问作者Lunargamer
相关产品推荐
相关产品推荐

