在Python中替换字符串中的字符
我正在为一个任务编写一个简单(非常简单,可笑的弱)的加密程序,不管我怎么做,我似乎都会遇到同样的错误在Python中替换字符串中的字符,python,string,replace,cryptography,character,Python,String,Replace,Cryptography,Character,我正在为一个任务编写一个简单(非常简单,可笑的弱)的加密程序,不管我怎么做,我似乎都会遇到同样的错误 def cryptofied(text, dic): for i, j in dic.items(): text = text.replace(i, j) return text 编辑:现在使用 def加密(文本,dic): ret=“” 对于范围内的p(len(text)): ret+=dic[文本[p]] 回程网 及 然而,当我输入“frank”作
def cryptofied(text, dic):
for i, j in dic.items():
text = text.replace(i, j)
return text
编辑:现在使用
def加密(文本,dic):
ret=“”
对于范围内的p(len(text)):
ret+=dic[文本[p]]
回程网
及
然而,当我输入“frank”作为代码dmsg时,它会回吐“GKXCC”,这显然是不正确的。据我所知,问题在于它将“K”改为“N”,然后将“N”的两个实例都改为“C”。我能做些什么来消除这种情况
编辑:
所以,现在这段代码的问题是,如果使用的字符不在我的锁中,那么会返回一个错误。如何忽略这些字符?这是因为
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
这是因为
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'
>>>
您可以迭代字符串本身:
>>> 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'
>>>
您可以使用索引迭代单词,然后逐个修改,如下所示:
for i in xrange(len(text)):
text[i] = dic[text[i]]
但是
您可以使用索引迭代单词,然后逐个修改,如下所示:
for i in xrange(len(text)):
text[i] = dic[text[i]]
但是
现在,
ret+=dic[text[p]]
需要是ret+=dic[text[p].upper()]
因为现在只有大写字母在dic
中,ret+=dic[text[p]
需要是ret+=dic[text[p].upper()
因为只有大写字母在dic
中使用s1=“”.join(lock.keys())
和s2=“”.join([lock[l]表示s1中的l])
使lock
dictI中的字符串非常喜欢这个答案,我想这可能是输入最快的方法,但由于我已经为另一个做了工作,我认为Pavel的建议可能对这个实例最有用使用s1=”“.join(lock.keys())
和s2=“”.join([lock[l]代表s1中的l])
使锁中的字符串非常喜欢这个答案,我想这可能是输入最快的方法,但由于我已经为另一个做了工作,我认为Pavel的建议可能对这个实例最有用欢迎来到StackOverflow!谢谢你提出的一个很好的问题——没有多少新用户写的问题像这个问题那么好。很高兴有你在这里,我希望你将来会喜欢为这个网站做贡献。欢迎来到StackOverflow!谢谢你提出的一个很好的问题——没有多少新用户写的问题像这个问题那么好。很高兴有你在这里,我希望你会喜欢贡献这个网站在未来。