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

凯撒密码编码器输出NoneNone的原因及修复方案

问题原因分析

你遇到的NoneNone输出,核心原因有两个:

  1. 字符串方法调用错误:所有Letter.lower == "a"这类判断都是错误的——lower是字符串的方法,必须加括号调用(Letter.lower())才能得到小写字母。你现在是把方法对象和字符串比较,所有条件都不成立,函数Numbererplussome走到末尾没有返回值,Python默认返回None。
  2. 部分分支缺少返回语句:函数Numbererplussome中处理x、y、z的分支没有return语句,就算前面的判断正确,这几个字母也会返回None;另外x分支里的int(Letter)毫无意义,还存在Numberee未定义就赋值的错误。

当Numbererplussome返回None时,UnNumberer接收的第一个参数是None,所有Numberee == 数字的条件都不成立,同样返回None,最终打印出来就是NoneNone。

修复后的代码

先修正上述问题,得到能正常运行的版本:

def Numbererplussome(Letter):
    lower_letter = Letter.lower()  # 提前转小写,避免重复调用
    if lower_letter == "a":
        Numberee = 1 + 3
        return Numberee
    elif lower_letter == "b":
        Numberee = 2 + 3
        return Numberee
    elif lower_letter == "c":
        Numberee = 3 + 3
        return Numberee
    elif lower_letter == "d":
        Numberee = 4 + 3
        return Numberee
    elif lower_letter == "e":
        Numberee = 5 + 3
        return Numberee
    elif lower_letter == "f":
        Numberee = 6 + 3
        return Numberee
    elif lower_letter == "g":
        Numberee = 7 + 3
        return Numberee
    elif lower_letter == "h":
        Numberee = 8 + 3
        return Numberee
    elif lower_letter == "i":
        Numberee = 9 + 3
        return Numberee
    elif lower_letter == "j":
        Numberee = 10 + 3
        return Numberee
    elif lower_letter == "k":
        Numberee = 11 + 3
        return Numberee
    elif lower_letter == "l":
        Numberee = 12 + 3
        return Numberee
    elif lower_letter == "m":
        Numberee = 13 + 3
        return Numberee
    elif lower_letter == "n":
        Numberee = 14 + 3
        return Numberee
    elif lower_letter == "o":
        Numberee = 15 + 3
        return Numberee
    elif lower_letter == "p":
        Numberee = 16 + 3
        return Numberee
    elif lower_letter == "q":
        Numberee = 17 + 3
        return Numberee
    elif lower_letter == "r":
        Numberee = 18 + 3
        return Numberee
    elif lower_letter == "s":
        Numberee = 19 + 3
        return Numberee
    elif lower_letter == "t":
        Numberee = 20 + 3
        return Numberee
    elif lower_letter == "u":
        Numberee = 21 + 3
        return Numberee
    elif lower_letter == "v":
        Numberee = 22 + 3
        return Numberee
    elif lower_letter == "w":
        Numberee = 23 + 3
        return Numberee
    elif lower_letter == "x":
        Numberee = 24 - 23
        return Numberee
    elif lower_letter == "y":
        Numberee = 25 - 23
        return Numberee
    elif lower_letter == "z":
        Numberee = 26 - 23
        return Numberee

def UnNumberer(Numberee):
    # 去掉没用的NewLetterrp参数,直接返回对应字母
    if Numberee == 1:
        return "a"
    elif Numberee == 2:
        return "b"
    elif Numberee == 3:
        return "c"
    elif Numberee == 4:
        return "d"
    elif Numberee == 5:
        return "e"
    elif Numberee == 6:
        return "f"
    elif Numberee == 7:
        return "g"
    elif Numberee == 8:
        return "h"
    elif Numberee == 9:
        return "i"
    elif Numberee == 10:
        return "j"
    elif Numberee == 11:
        return "k"
    elif Numberee == 12:
        return "l"
    elif Numberee == 13:
        return "m"
    elif Numberee == 14:
        return "n"
    elif Numberee == 15:
        return "o"
    elif Numberee == 16:
        return "p"
    elif Numberee == 17:
        return "q"
    elif Numberee == 18:
        return "r"
    elif Numberee == 19:
        return "s"
    elif Numberee == 20:
        return "t"
    elif Numberee == 21:
        return "u"
    elif Numberee == 22:
        return "v"
    elif Numberee == 23:
        return "w"
    elif Numberee == 24:
        return "x"
    elif Numberee == 25:
        return "y"
    elif Numberee == 26: 
        return "z"

print("hello this is a ceasers cipher encoder please type your message below")
cstr = input()
print("the encoded message should be:")
for letter in cstr:
    print(UnNumberer(Numbererplussome(letter)), end="")
更简洁的优化版本

原来的代码用了大量重复的if-elif,可以利用Python的ord()和chr()函数直接处理字符的ASCII码,大幅简化代码:

def caesar_cipher_encode(text, shift=3):
    result = []
    for char in text:
        if char.islower():
            # 处理小写字母
            shifted = ord(char) + shift
            if shifted > ord('z'):
                shifted -= 26
            result.append(chr(shifted))
        elif char.isupper():
            # 处理大写字母(可选)
            shifted = ord(char) + shift
            if shifted > ord('Z'):
                shifted -= 26
            result.append(chr(shifted))
        else:
            # 非字母字符直接保留
            result.append(char)
    return ''.join(result)

print("hello this is a ceasers cipher encoder please type your message below")
cstr = input()
print("the encoded message should be:")
print(caesar_cipher_encode(cstr))

这个版本不仅更简洁,还支持大写字母和非字母字符的处理,逻辑更清晰。

内容的提问来源于stack exchange,提问作者TheCube541

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:24:57