簡體   English   中英

在Python中替換字符串中的字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM