在我的课程中,我的任务是创建一个 Caesar Cipher 解码器,它接受输入字符串并使用字母频率找到可能的最佳字符串。如果不确定这有多大意义,请发布问题:
编写一个执行以下操作的程序。首先,它应该读取一行输入,即编码消息,由大写字母和空格组成。您的程序必须尝试使用移位 S 的所有 26 个可能值来解码消息;在这 26 条可能的原始消息中,打印出具有最高善意的一条。为方便起见,我们将为您预定义变量 letterGoodness,长度为 26 的列表等于上面频率表中的值
到目前为止我有这个代码:
x = input()
NUM_LETTERS = 26 #Can't import modules I'm using a web based grader/compiler
def SpyCoder(S, N):
y = ""
for i in S:
x = ord(i)
x += N
if x > ord('Z'):
x -= NUM_LETTERS
elif x < ord('A'):
x += NUM_LETTERS
y += chr(x)
return y
def GoodnessFinder(S):
y = 0
for i in S:
if x != 32:
x = ord(i)
x -= ord('A')
y += letterGoodness[x]
return y
def GoodnessComparer(S):
goodnesstocompare = GoodnessFinder(S)
goodness = 0
v = ''
for i in range(0, 26):
v = SpyCoder(S, i)
goodness = GoodnessFinder(v)
if goodness > goodnesstocompare:
goodnesstocompare = goodness
return v
y = x.split()
z = ''
for i in range(0, len(y)):
if i == len(y) - 1:
z += GoodnessComparer(y[i])
print(z)
编辑:Cristian Ciupitu 建议进行更改请忽略缩进错误,它们可能是在我复制代码时出现的。
该程序的工作原理如下:
- 获取输入并将其拆分为列表
- 对于每个列表值,我将其提供给善良的发现者。
- 它采用字符串的优点并将其他所有内容进行比较,当有更高的优点时,它会使更高的优点成为比较的优点。
- 然后它将该文本字符串移动 i 量,以查看优度是更高还是更低
我不太确定问题出在哪里,第一个测试:LQKP OG CV GKIJV DA VJG BQQ
打印正确的消息:在动物园旁加入我
然而下一个测试: UIJT JT B TBNQMF MJOF PG UFYU GPS EFDSZQUJOH
给出一个垃圾字符串: SGHR HR Z RZLOKD KHMD NE SDWS ENQ CDBQXOSHMF
当它应该是: 这是一个用于解密的示例文本行
我知道我必须:
尝试每个班次值
获取单词的“善良”
返回具有最高善良的字符串。
我希望我的解释是有道理的,因为我现在很困惑。