卡塞尔密码问题

2024-10-02 22:27:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经创建了代码,并将其输出。对于检查输入,我有2/3次正确运行,但输入时缺少部分输出
“你好,世界!”你知道吗

一切运转正常。你知道吗

    plainText = input("Enter a message: ")
    distance = int(input("Enter the distance value: "))
    code = ""
    for ch in plainText:
        ordvalue = ord(ch)
        cipherValue = ordvalue + distance
        if cipherValue > ord ('z'):
            cipherValue = ord('a') + distance - (ord('z') - ordvalue + 1)
        code = code + chr(cipherValue)
    print(code)

加密输出应该是Lipps${svph%,但是我得到了Lipps$asvph%。只是想找到我在这里丢失的东西。你知道吗


Tags: the代码messageinput世界codechint
3条回答

凯撒密码只改变a..z范围内的字符。所有其他字符保持不变。代码中缺少此限制。你知道吗

if 'a' <= ch <= 'z':
    cipherValue = ...
else:
    cipherValue = ch

顺便说一下,在> ord('z')的情况下,您可以使代码简单得多:

cipherValue -= 26

或者,如果你不想写数字26,而是想解释一下:

cipherValue -= 1 + ord('z') - ord('a')

对于那些想知道-这是一个语言问题。它应该是“~”而不是“a”和“z”。你知道吗

希望这对将来的人有帮助。你知道吗

您希望'w'(从'Hello world!')转换成'{'-而不是'a'。但事实并非如此。你知道吗

从你的例子可以推断distance4'H'变成'L'。然后,根据您的算法,'w'必然会变成'a'ord('w') + 4等于ord('z') + 1,因为ord('w') == ord('z') - 3。因此if语句的then子句将被执行。如果您通过用ord('z') - 3替换ordvalue来计算结果,您将看到结果将是ord('a')。你知道吗

因为,正如您在注释中所解释的,您希望使代码将字符串'Hello World!'转换为'Lipps${svph%',所以您可能只需要消除代码中执行“overwrap”处理的部分,即消除处理cipherValue > ord ('z')的情况的代码。你知道吗

相关问题 更多 >