[英]Replacing characters in a string in Python
為一個分配工作一個簡單的(非常簡單,可笑的弱)加密程序,無論我采用哪種方式,我似乎都遇到了相同的錯誤。
def cryptofied(text, dic):
for i, j in dic.items():
text = text.replace(i, j)
return text
編輯:現在使用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')
但是,當我輸入“ frank”作為編碼后的消息時,它將吐回到“ GKXCC”,這顯然是不正確的。 據我所知,問題在於它是將“ K”更改為“ N”,然后將“ N”的兩個實例都更改為“ C”。 我該怎么做才能消除這種情況?
編輯:因此,此代碼現在的問題是,如果使用的字符不在我的鎖中,則會返回錯誤。 如何忽略這些字符?
您可以遍歷帶有索引的單詞,然后一個接一個地修改它們,如下所示:
for i in xrange(len(text)):
text[i] = dic[text[i]]
但是有一個叫做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
這是因為text.replace(i, j)
對i
所有匹配進行運算。
而不是遍歷字典
for i, j in dic.items():
text = text.replace(i, j)
您需要遍歷輸入單詞中的位置
ret = ""
for p in range(len(text)):
ret += dic[text[p]]
return ret
您可以遍歷字符串本身:
>>> 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'}
>>> text = "FRANK"
>>> encrypted_text = ""
>>> for char in text:
... encrypted_text += lock.get(char)
...
>>> encrypted_text
'DKXWN'
>>>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.