在Python中调试Caesar密码

2024-10-01 09:20:12 发布

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

当我输入“Hello World!”时,它会被加密为“KNUUXWZXAUMX”,如果我将其放入我的解密代码中,则解密返回为“hkrutwuxrju”

由于这是一个高中项目,因此需要一些必需的函数等。我必须在代码中使用函数、列表和循环。还有其他的要求,我想稍后会像包括大写字母,数字,和要加密的标点符号

我的代码是:

text = (input('Add some text: '))
def toList(text):
    text.split()
    return text

def encrypt(text):
    shift = 3
    text1 = text
    encryption = ""
    for x in text1:
        xCode = ord(x)
        xGuide = xCode - ord("A")
        newGuide = (xGuide + shift) % 26
        newCode = newGuide + ord("A")
        newLetters = chr(newCode)
        encryption = encryption + newLetters
    print("encrypted text: ", encryption)
    print("text:", text1)

encrypt(text) 
cipherText = (input('Add some encrypted text: '))

def decrypt(cipherText):
    shift = 3
    cipherText1 = cipherText
    regularText = ""
    for x in cipherText1:
        xCode = ord(x)
        xGuide = xCode - ord("A")
        newGuide = (xGuide - shift) % 26
        newCode = newGuide + ord("A")
        newLetters = chr(newCode)
        regularText = regularText + newLetters

    print("Encrypted text:", cipherText1)
    print("Decrypted text:", regularText)

decrypt(cipherText)

Tags: 代码textshiftdefxcodeencryptionprintciphertext
1条回答
网友
1楼 · 发布于 2024-10-01 09:20:12

我很高兴你问的是“如何调试”,而不是“如何修复”

最初的观察结果或错误报告是键入Hello World!,它被加密为KNUUXWZXAUMX,但相同的文本被解密为HKRRUTWUXRJU

您现在可以使用调试器并逐步完成代码,但您可以通过各种方式变得更聪明

步骤1:设置版本控制,确保您已完成所有工作,以便您可以随时回滚。理想情况下,创建一个bug修复分支

步骤2:无需用户输入即可重现问题。而不是

text = (input('Add some text: '))

text = "Hello World!"

而不是

cipherText = (input('Add some encrypted text: '))

cipherText = "KNUUXWZXAUMX"

这样做可以节省大量时间,并防止输入中出现拼写错误。转移到版本控制或提交(如果您在分支上)

顺便说一句,这将是一个询问堆栈溢出的好阶段。不要让伙计们自己输入。他们可能会犯错误

步骤3:减少数据量

使用"A"作为输入将"D"作为加密文本-这看起来不错

使用"a"作为输入将"J"作为加密文本-因此您发现了一个字符更少的输入来重现问题。调试单个字符而不是一个句子要容易得多

此时,您已经消除了50%的调试代码:您知道至少有一个问题出现在encrypt函数中,而不是decrypt函数中。(不过,可能还有更多问题)

步骤4:调试

尽早在encrypt函数中设置断点,并逐步完成代码。检查每个中间结果并思考它

你不知道调试器是什么?下载PyCharm社区版并阅读其调试器。您需要知道如何使用调试器。这是一个不可或缺的工具

相关问题 更多 >