gpt4 book ai didi

Python凯撒密码解码器

转载 作者:太空狗 更新时间:2023-10-30 01:09:42 26 4
gpt4 key购买 nike

在我的类(class)中,我的任务是创建一个 Caesar Cipher 解码器,它接受输入字符串并使用字母频率找到最佳字符串。如果不确定这有多大意义,请发布问题:

编写一个执行以下操作的程序。首先,它应该读取一行输入,这是经过编码的消息,由大写字母和空格组成。您的程序必须尝试使用​​移位 S 的所有 26 个可能值来解码消息;在这 26 条可能的原始消息中,打印出具有最高善意的消息。为了您的方便,我们会为您预定义变量 letterGoodness,一个长度为 26 的列表,等于上面频率表中的值

Letter Frequencies

到目前为止我有这段代码:

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
当它应该是:这是用于解密的示例文本行

我知道我必须:
尝试每个移位值
得到这个词的‘善’
返回具有最高优点的字符串。

我希望我的解释是有道理的,因为我现在很困惑。

最佳答案

这是我的实现,效果很好。

您应该打印每条可能消息的优点,并查看您的程序输出它的原因。

letterGoodness = dict(zip(string.ascii_uppercase,
[.0817,.0149,.0278,.0425,.1270,.0223,.0202,
.0609,.0697,.0015,.0077,.0402,.0241,.0675,
.0751,.0193,.0009,.0599,.0633,.0906,.0276,
.0098,.0236,.0015,.0197,.0007]))

trans_tables = [ str.maketrans(string.ascii_uppercase,
string.ascii_uppercase[i:]+string.ascii_uppercase[:i])
for i in range(26)]

def goodness(msg):
return sum(letterGoodness.get(char, 0) for char in msg)

def all_shifts(msg):
msg = msg.upper()
for trans_table in trans_tables:
txt = msg.translate(trans_table)
yield goodness(txt), txt

print(max(all_shifts(input())))

关于Python凯撒密码解码器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10792052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com