Vigenere Cipher加密问题求助:代码无输出且无法实现指定加密逻辑
解决Vigenère加密无输出的问题
兄弟,我太懂这种卡了好几个小时连个输出都看不到的憋屈感!你说的用密钥abc加密bob的需求其实很明确,咱们先从最常见的几个坑入手,再给你一个能直接跑的示例代码,你对照着看看自己的问题出在哪。
常见的无输出原因
- 忘记打印结果:很多时候代码逻辑其实没问题,但写完加密函数后压根没调用,或者调用了没把结果
print出来,自然看不到输出 - 字符处理错误:直接用ASCII值计算时没把字母映射到0-25的范围(比如A/a对应0),结果算出的是不可见的控制字符,看起来就像没输出
- 密钥循环逻辑出错:当明文比密钥长时,没正确重复密钥,导致后续字符计算异常甚至静默报错,最终也没输出
能直接运行的示例代码(Python)
def vigenere_encrypt(plaintext, key): ciphertext = [] key_index = 0 # 统一转小写简化处理,也可以保留大小写逻辑,按需调整 plaintext = plaintext.lower() key = key.lower() for char in plaintext: # 只处理字母字符,非字母直接保留 if char.isalpha(): # 把字母转成0-25的索引(a=0, b=1...z=25) plain_char_num = ord(char) - ord('a') key_char_num = ord(key[key_index]) - ord('a') # Vigenère加密核心公式:(明文索引 + 密钥索引) % 26 cipher_char_num = (plain_char_num + key_char_num) % 26 # 转回ASCII字母字符 cipher_char = chr(cipher_char_num + ord('a')) ciphertext.append(cipher_char) # 密钥索引循环,用完从头开始 key_index = (key_index + 1) % len(key) else: ciphertext.append(char) return ''.join(ciphertext) # 测试你的案例:密钥abc加密bob plaintext = 'bob' key = 'abc' encrypted_result = vigenere_encrypt(plaintext, key) print(f"加密结果:{encrypted_result}")
运行这段代码会得到cpd,咱们手动验证下:
- 第一个
b(索引1) + 密钥a(索引0) = 1 →c - 第二个
o(索引14) + 密钥b(索引1) =15 →p - 第三个
b(索引1) + 密钥c(索引2) =3 →d
对照检查你的代码
- 先确认你调用了加密函数并且打印了结果,这是最容易忽略的点
- 检查字符转换逻辑:是不是把字母正确转成了0-25的范围,而不是直接用原始ASCII值相加(直接加会超出字母范围得到不可见字符)
- 密钥循环:当明文长度大于密钥时,有没有用取模
%来循环密钥索引 - 异常处理:如果你的代码遇到非字母字符就崩溃,也会导致没输出,建议加判断只处理字母
如果还是找不到问题,把你的代码贴出来,咱们再一起揪bug!
内容的提问来源于stack exchange,提问作者SepZ
相关产品推荐
相关产品推荐

