You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vigenère解密函数无法保留空格输出的问题求助

Vigenère解密函数无法保留空格输出的问题求助

嘿,我来帮你排查下这个问题~你的代码里确实有几个逻辑漏洞导致空格没法正确保留,咱们一步步拆解清楚:

核心问题分析

  1. 循环嵌套逻辑混乱:你先把加密文本去掉空格存到encrypted_text里,外层循环处理这些字符计算偏移后,又套了一个遍历原text的内层循环——这会导致每个解密后的字符被重复添加多次,完全打乱了字符顺序。
  2. 空格判断语法错误:if c in text == " "这种写法完全不成立,正确的空格判断应该是if c == " ",原代码里这行逻辑永远不会触发,自然没法添加空格。
  3. 字符偏移复用错误:外层循环计算的shifted_char对应encrypted_text里某个字符的偏移,但内层循环直接拿这个偏移套用所有字符,没有对应到正确的原字符位置,解密结果必然出错。

修正后的代码

咱们重新梳理逻辑:直接遍历原文本的每个字符,遇到空格直接保留;遇到字母时,用计数器跟踪非空格字符的位置,匹配对应的密钥字符解密:

def vigenere_decrypt(key: str, text: str) -> str:
    decrypted_text = ""
    # 统一密钥为小写,避免大小写干扰
    key = key.lower()
    key_length = len(key)
    # 跟踪当前处理到第几个非空格字符
    non_space_index = 0
    
    for char in text:
        if char == " ":
            # 空格直接加入结果
            decrypted_text += " "
            continue
        # 匹配对应位置的密钥字符
        key_char = key[non_space_index % key_length]
        # 计算解密偏移:先转成0-25的字母范围,再还原为字符
        shifted_value = (ord(char.lower()) - ord(key_char)) % 26
        decrypted_char = chr(shifted_value + ord('a'))
        decrypted_text += decrypted_char
        non_space_index += 1
    
    return decrypted_text

print(vigenere_decrypt("math", "yadl ut ahbpxu"))

代码说明

  • 直接遍历原文本,遇到空格直接保留,不用先去除空格再处理,自然保留空格的原始位置。
  • 用non_space_index跟踪非空格字符的计数,确保每个需要解密的字母都能匹配到正确的密钥字符。
  • 修正了偏移计算逻辑,确保每个字母的解密都基于对应的密钥字符,避免原代码循环嵌套导致的重复计算问题。

运行这段代码就能得到带空格的正确解密结果啦~

备注:内容来源于stack exchange,提问作者zeynepdirier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 10:28:12