在 Python 中调试凯撒密码

0 python encryption

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

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

我的代码是:

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)
Run Code Online (Sandbox Code Playgroud)

Tho*_*ler 6

我很高兴你问“如何调试这个”而不是“如何修复这个”。

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

您现在可以使用调试器并逐步执行代码,但您可以通过多种方式变得更聪明。

第 1 步:设置版本控制并确保您已提交所有工作,以便您可以随时回滚。理想情况下创建一个错误修复分支。

步骤 2:无需用户输入即可重现问题。代替

text = (input('Add some text: '))
Run Code Online (Sandbox Code Playgroud)

text = "Hello World!"
Run Code Online (Sandbox Code Playgroud)

而不是

cipherText = (input('Add some encrypted text: '))
Run Code Online (Sandbox Code Playgroud)

cipherText = "KNUUXWZXAUMX"
Run Code Online (Sandbox Code Playgroud)

这样做将为您节省大量时间并防止输入错误。如果您在分支上,则进入版本控制或提交。

顺便说一句,这将是一个向 Stack Overflow 提问的好时机。不要让 SO 上的人自己输入。他们可能会犯错误。

步骤3:减少数据。

使用"A"作为输入给出"D"加密文本 - 看起来不错!

使用"a"as 输入给出"J"加密文本 - 因此您发现一个包含更少字符的输入来重现该问题。调试单个字符而不是句子会容易得多。

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

第四步:调试。

在函数的早期放置一个断点encrypt并单步执行代码。检查每一个中间结果并思考它。

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

  • 我喜欢这个答案。在当代计算机科学专业的学生中,调试似乎是一项正在消失的技能。 (2认同)