在我的课程中,我的任务是创建一个凯撒密码解码器,它需要一串输入并使用字母频率找到最好的字符串。如果不知道多少意义,但让问题发布:Python凯撒密码解码器
编写一个程序,它执行以下操作。首先,它应该读取一行输入,这是编码的消息,并将包含大写字母和空格。您的程序必须尝试使用所有26个可能的值S来解码消息;在这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建议更改 请忽略缩进错误,它们可能在我复制我的代码时出现。
的程序是这样的:
- 就拿输入,并将其分割成一个列表
- 对于每一个列表值我将其提供给一个善良取景器。
- 它需要字符串的好处,并将其他所有内容进行比较,当有更高的善意时,它会使得更高的善良性比较。
- 它然后我偏移量文本的该字符串,看看优度较高或较低
我不太清楚是哪里的问题,第一个测试:LQKP OG CV GKIJV DA VJG BQQ
打印正确的消息:JOIN ME AT在由ZOO
然而接下来的测试:UIJT JT乙TBNQMF MJOF PG UFYU GPS EFDSZQUJOH
给出的垃圾字符串:SGHR HRžRZLOKD KHMD NE SDWS ENQ CDBQXOSHMF
当它应该是:这是一个示例文本的DECRYPTIN摹
我知道我必须:
想尽一切移值
获取字
返回字符串最高善良“善良”。
我希望我的解释有意义,因为我现在很困惑。
如果你为垃圾字符串'SGHR HR Z RZLOKD ...'中的每个字符加1,你会得到'THIS IS A SAMPLE ...',所以它几乎是正确的。 –
你应该尝试用有意义的常量替换一些神奇的数字,例如65用'ord('A')',26用'NUM_LETTERS'。顺便说一下'GoodnessComparer'你有'range(0,25)'而不是'(0,26)';这是一个错字还是不是?还有一件事:在GoodnessFinder中,每次只需要'i'是一个空格(''''')时,你不需要执行'ord(i)'。 –
[input()](http://docs.python.org/library/functions.html#input)与'eval(raw_input())'等价,这是没有意义的,所以用一个普通的' raw_input()'调用。 –