我打开2个文件并阅读它们。我有一个辅助函数,可以创建一个随机的31个字符串的字母+“,';。?”
例如,该函数可以创建“seokgxavu?'bq,cr.ihwt; yjzmdfpnl”这一行,它包含所有31个字符并且是随机顺序,辅助函数创建其中2行并将它们写入secret.txt
所以说两条随机的秘密行是:
seokgxavu?'bq,cr.ihwt;yjzmdfpnl
dcurmk'ltbgjyfan?;ohzieps,vxwq.
对于english.txt中的每个字母,每个字母都应该有自己对应的secret.txt字母。每当它写一封信,它就会从另一条秘密行中获得下一封信。例如,“Hello”将输出“vmbja”
v因为“h”是它在第一个秘密线中的位置 因为“e”是它在第二条秘密线中的位置 b因为“l”是第一个秘密线的位置(注意它是如何回到第一个,这应该继续。)
with open("english.txt", 'r') as e:
PlainText = e.read()
with open("secret.txt", 'r') as s:
SharedKeys = s.read()
with open("code.txt", 'w') as c:
x = english[0]
y = secret[0]
x = y
code.write(str(x))
上面的代码会将english.txt中的第一个字母与secret.txt中的第一个字母匹配,然后将其写入code.txt。但是,我不确定如何重复这一点,以便它将为整段文本做到这一点。任何提示或指示表示赞赏!感谢。
答案 0 :(得分:2)
我得到了“你好”的“vmbjc”...我认为这就是你的意思,因为当你替换秘密线时,你会在第一个秘密线中找到“o”位置,它有一个“c” 。第二个秘密在那个位置上有“a”。
english = "abcdefghijklmnopqrstuvwxyz" + ",';.?"
secret = []
with open("secrets.txt" , "r") as s:
secret = [line.rstrip() for line in s]
cypher = dict((c, [x[i] for x in secret]) for i, c in enumerate(english))
def translate(s):
secret_index = 0
trans = []
for c in s:
# not sure how spaces are dealt with
trans.append(cypher[c][secret_index] if not c == ' ' else ' ')
secret_index = (secret_index + 1) % len(secret)
return ''.join(trans)
print(translate("hello")) # vmbjc
更新:扩展cypher
作业
cypher = {}
for i in range(len(english)): # for each english character
c = english[i]
secrets = []
for j in range(len(secret)): # for each corresponding secret character
secrets.append(secret[j][i])
cypher[c] = secrets # make a mapping of english character to list-of-secret-characters
secrets = [] # clear out list of secret characters for the next english character
答案 1 :(得分:0)
使用字典从代码翻译怎么样?你可以这样做:
e='abcdefghi' #etc.
s='seokgxavu'
s_to_e={}#depending on which you need
e_to_s={}
for i in range(len(e)):#assuming s and e have same length
s_to_e[s[i]]=e[i]
e_to_s[e[i]]=s[i]
code_str='seo'
decoded=''
plain_str='hifi'
encoded=''
for i in range(len(code_str)):
decoded+=s_to_e[code_str[i]]
for i in range(len(plain_str)):
encoded+=e_to_s[plain_str[i]]
#encoded should now be 'vuxu' and decoded 'abc'
您还必须映射空格(换行符,空格等)以执行段落或更多段落,执行以下操作:
s_to_e[' ']=' '
。
或者将s='cdfa '
,e='abcd '