python - 在 Python 中调试凯撒密码
问题描述
当我输入“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 步:设置版本控制并确保您已提交所有工作,以便您可以随时回滚。理想情况下创建一个错误修复分支。
第 2 步:在没有用户输入的情况下使问题可重现。代替
text = (input('Add some text: '))
写
text = "Hello World!"
而不是
cipherText = (input('Add some encrypted text: '))
写
cipherText = "KNUUXWZXAUMX"
这样做可以为您节省大量时间,并防止您输入错误。如果您在分支上,则暂存到版本控制或提交。
顺便说一句,这将是询问 Stack Overflow 的好时机。不要让 SO 上的人自己输入。他们可能会犯错误。
第三步:减少数据。
使用"A"
作为输入给出"D"
加密文本 - 看起来不错!
使用"a"
作为输入提供"J"
加密文本 - 因此您发现输入的字符要少得多来重现问题。调试单个字符而不是一个句子会容易得多。
至此,您已经消除了 50% 的代码进行调试:您知道至少有一个问题似乎出在encrypt
函数中,而不是在decrypt
函数中。(不过,可能还有更多问题)。
第 4 步:调试。
尽早在encrypt
函数中设置断点并单步执行您的代码。检查每个中间结果并考虑一下。
你不知道调试器是什么?下载 PyCharm 社区版并了解它的调试器。您需要知道如何使用调试器。是必不可少的工具
推荐阅读
- reactjs - 反应输入类型图像 onclick 属性也未呈现不可点击
- javascript - 用字符串中的新内容替换整个 div 内容
- reactjs - 反应 onClick 在 Firefox 或 Safari 中不起作用
- python-3.x - edgecolors - 如何为标记的边框着色
- javascript - 超链接 - 如何使用条件禁用 href 按钮(javascript)
- python - 没有名为“delta.tables”的模块
- c# - 列表视图子项前景色
- c# - C#通过父类查找子类
- json - SwiftUI 从具有条目值的 URL 解析 json
- python - 通过 SSH 连接到 Docker 时,RemoteDisconnected(远程结束关闭连接而没有响应)