USE*_*309 1 python string cryptography replace character
为一个赋值工作一个简单的(非常简单,可笑的弱)密码学程序,无论我采用哪种方式,我似乎都遇到了同样的错误.
def cryptofied(text, dic):
for i, j in dic.items():
text = text.replace(i, j)
return text
Run Code Online (Sandbox Code Playgroud)
编辑:现在使用def cryptofied(text,dic):ret =""for p in range(len(text)):ret + = dic [text [p]] return ret
和
def encode(codedMsg):
print(codedMsg, ' Here was your message to be encoded.')
lock = {'A':'X', 'B':'P', 'C':'M', 'D':'G', 'E':'T', 'F':'D', 'G':'H', 'H':'L', 'I':'Y', 'J':'O', 'K':'N', 'L':'Z', 'M':'B', 'N':'W', 'O':'E', 'P':'A', 'Q':'R', 'R':'K', 'S':'J', 'T':'U', 'U':'F', 'V':'S', 'W':'C', 'X':'I', 'Y':'Q', 'Z':'V'}
codedMsgTest = cryptofied(codedMsg, lock)
print(codedMsgTest, 'here is your coded message')
Run Code Online (Sandbox Code Playgroud)
但是,当我输入例如"frank"作为codedMsg时,它会回吐"GKXCC",这显然是不正确的.据我所知,问题在于它将"K"改为"N",然后将"N"的两个实例都改为"C".我该怎么做才能消除这种情况?
编辑:所以,现在这个代码的问题是,如果使用的字符不在我的锁中,则会出现错误.我该如何忽略这些字符?
您可以使用索引迭代单词,然后依次修改它们,如下所示:
for i in xrange(len(text)):
text[i] = dic[text[i]]
Run Code Online (Sandbox Code Playgroud)
但是有一个叫做的方法maketrans(),可以让你做到这一点.
import string
s1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
s2 = "XPMGTDHLYONZBWEARKJUFSCIQV"
trans = string.maketrans(s1,s2)
strtrans = "THIS IS A SAMPLE PROGRAM FOR MAKETRANS"
outstr = strtrans.translate(trans)
print outstr # ULYJ YJ X JXBAZT AKEHKXB DEK BXNTUKXWJ
Run Code Online (Sandbox Code Playgroud)