我要做的是制作一个程序,用字母 AZ 加密文本文件(您指定),然后将其保存在另一个文件中。
例如,使文本文件中的第一个字母为“A”,第二个字母为“B”,第三个字母为“C”等。
我想知道是否有人可以帮助我,或者至少给我一些关于如何开始的提示。
我要做的是制作一个程序,用字母 AZ 加密文本文件(您指定),然后将其保存在另一个文件中。
例如,使文本文件中的第一个字母为“A”,第二个字母为“B”,第三个字母为“C”等。
我想知道是否有人可以帮助我,或者至少给我一些关于如何开始的提示。
如果我从字面上理解你,这就是:
from itertools import cycle
import string
with open('input.txt', 'rt') as input, open('output.txt', 'wt') as output:
cipher = cycle(string.uppercase)
for line in input:
encrypted = []
for c in line:
if c in string.letters:
encrypted.append(cipher.next())
else:
encrypted.append(c)
output.write(''.join(encrypted))
输入文件:
This is a sentence.
And so is this.
输出文件:
ABCD EF G HIJKLMNO.
PQR ST UV WXYZ.
这样做的问题是我认为没有一种实用的方法可以取消加密文本,因为在此过程中会丢失大量信息 - 字母的加密版本仅取决于它在文件中的相对位置,并且不是原来的样子。
我会尝试:
from string import ascii_uppercase
from itertools import count
from operator import itemgetter
text = 'hellothere'
counter = count(0)
ref = {}
for ch in text:
if ch not in ref:
ref[ch] = next(counter)
letters = ''.join(el[0] for el in sorted(ref.iteritems(), key=itemgetter(1)))
frm, to = zip(*zip(letters, ascii_uppercase))
from string import maketrans
trans = maketrans(''.join(frm), ''.join(to))
print text.translate(trans)
# ABCCDEABFB