Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中替换字符串中的字符_Python_String_Replace_Cryptography_Character - Fatal编程技术网

在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!谢谢你提出的一个很好的问题——没有多少新用户写的问题像这个问题那么好。很高兴有你在这里,我希望你会喜欢贡献这个网站在未来。