在Python中调试Caesar密码



当我输入&;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)

我很高兴你问"如何调试这个";而不是"如何解决这个问题"。

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

你现在可以使用调试器来逐步检查你的代码,但是你可以在很多方面更聪明。

步骤1设置版本控制,确保你已经提交了所有的工作,这样你就可以随时回滚。理想情况下,创建一个bug修复分支。

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

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

text = "Hello World!"

而不是

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

cipherText = "KNUUXWZXAUMX"

这样做会节省你很多时间,并防止你输入错误。如果你在一个分支上,则进入版本控制或提交阶段。

这将是一个伟大的阶段,问堆栈溢出,顺便说一句。不要让SO上的人自己输入。他们可能会犯错。

步骤3:减少数据

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

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

在这一点上,您已经消除了50%的代码用于调试:您知道至少有一个问题似乎在encrypt函数中,而不是在decrypt

函数中。(不过可能还会有更多的问题)。 步骤4:调试。

encrypt函数中提前放置一个断点,并逐步执行代码。检查每一个中间结果并仔细考虑

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

最新更新