在Python中用另一个彩色字符替换每个字符

在Python中用另一个彩色字符替换每个字符,python,substitution,Python,Substitution,我正在处理一个单字母加密文本,我试图根据每个字母的频率猜测原始文本。在逐步替换时,我遇到了一个错误,下面的字母m是我的代码 `cipher_text = "iyzzfwpmzcyawcixvwxvwciywpfavcwryvvm ywqafrwciywbfs fwhzymvywuywmpmaywcimcwciywrmvbmamgywimvwuyyswcfcmzzewgxvbfkyaygwsfwrfaywbfrrjsxbmcxfsvwvxsbywciyewmaywcwgms yafjvw

我正在处理一个单字母加密文本,我试图根据每个字母的频率猜测原始文本。在逐步替换时,我遇到了一个错误,下面的字母m是我的代码

`cipher_text = "iyzzfwpmzcyawcixvwxvwciywpfavcwryvvm ywqafrwciywbfs fwhzymvywuywmpmaywcimcwciywrmvbmamgywimvwuyyswcfcmzzewgxvbfkyaygwsfwrfaywbfrrjsxbmcxfsvwvxsbywciyewmaywcwgms yafjvwqfawjvwuewciywpmewciywrfvcwhfhjzmawzyccyavwxswys zxviwmaywycmfxswviagzj"

frequency_letters = {}

for line in cipher_text:
    for char in line:
        if char not in frequency_letters:
            frequency_letters[char]=1
        else:
            frequency_letters[char] += 1



attempt = cipher_text.replace("z","\033[31ml\033[0m")

attempt = attempt.replace("i","\033[31mh\033[0m")
attempt = attempt.replace("c","\033[31mt\033[0m")
attempt = attempt.replace("y","\033[31me\033[0m")
attempt = attempt.replace("w","\033[31m''\033[0m")
attempt = attempt.replace("f","\033[31mo\033[0m")
attempt = attempt.replace("p","\033[31mw\033[0m")
attempt = attempt.replace("a","\033[31mr\033[0m")
attempt = attempt.replace("x","\033[31mi\033[0m")
attempt = attempt.replace("v","\033[31ms\033[0m")

#below is the line that gives an error substituting m to a
#attempt = attempt.replace("m","\033[31ma\033[0m")

print(attempt)


`
When it comes to substituting m to a i get these`[31[31mah[0[31ma[31[31mae[0[31ma[31[31mal[0[31ma[31[31mal[0[31ma[31[31mao[0[31ma[31[31ma''[0[31ma[31[31maw[0[31maa[31[31mal[0[31ma[31[31mat[0[31ma[31[31mae[0[31ma[31[31mar[0[31ma[31[31ma''[0[31ma[31[31mat[0[31ma[31[31mah[0[31ma[31[31mai[0[31ma[31[31mas[0[31ma[31[31ma''[0[31ma[31[31mai[0[31ma[31[31mas[0[31ma[31[31ma''[0[31ma[31[31mat[0[31ma[31[31mah[0[31ma[31[31mae[0[31ma[31[31ma''[0[31ma[31[31maw[0[31ma[31[31mao[0[31ma[31[31mar[0[31ma[31[31mas[0[31ma[31[31mat[0[31ma[31[31ma''[0[31mar[31[31mae[0[31ma[31[31mas[0[31ma[31[31mas[0[31maa [31[31mae[0[31ma[31[31ma''[0[31maq[31[31mar[0[31ma[31[31mao[0[31mar[31[31ma''`

至少,使用函数给文本着色会更方便。大概是这样的:

cipher_text = "iyzzfwpmzcyawcixvwxvwciywpfavcwryvvm ywqafrwciywbfs fwhzymvywuywmpmaywcimcwciywrmvbmamgywimvwuyyswcfcmzzewgxvbfkyaygwsfwrfaywbfrrjsxbmcxfsvwvxsbywciyewmaywcwgms yafjvwqfawjvwuewciywpmewciywrfvcwhfhjzmawzyccyavwxswys zxviwmaywycmfxswviagzj"

frequency_letters = {}

for line in cipher_text:
    for char in line:
        if char not in frequency_letters:
            frequency_letters[char]=1
        else:
            frequency_letters[char] += 1

def c(character):
    return "\x1b[31m" + character + "\x1b[0m"

attempt = cipher_text.replace("z",c("l"))

attempt = attempt.replace("i", c("h"))
attempt = attempt.replace("c", c("t"))
attempt = attempt.replace("y", c("e"))
attempt = attempt.replace("w", c("''"))
attempt = attempt.replace("f", c("o"))
attempt = attempt.replace("p", c("w"))
attempt = attempt.replace("a", c("r"))
attempt = attempt.replace("x", c("i"))
attempt = attempt.replace("v", c("s"))
attempt = attempt.replace("mm", c("a"))

print(attempt)
或:


至少,使用函数给文本着色会更方便。大概是这样的:

cipher_text = "iyzzfwpmzcyawcixvwxvwciywpfavcwryvvm ywqafrwciywbfs fwhzymvywuywmpmaywcimcwciywrmvbmamgywimvwuyyswcfcmzzewgxvbfkyaygwsfwrfaywbfrrjsxbmcxfsvwvxsbywciyewmaywcwgms yafjvwqfawjvwuewciywpmewciywrfvcwhfhjzmawzyccyavwxswys zxviwmaywycmfxswviagzj"

frequency_letters = {}

for line in cipher_text:
    for char in line:
        if char not in frequency_letters:
            frequency_letters[char]=1
        else:
            frequency_letters[char] += 1

def c(character):
    return "\x1b[31m" + character + "\x1b[0m"

attempt = cipher_text.replace("z",c("l"))

attempt = attempt.replace("i", c("h"))
attempt = attempt.replace("c", c("t"))
attempt = attempt.replace("y", c("e"))
attempt = attempt.replace("w", c("''"))
attempt = attempt.replace("f", c("o"))
attempt = attempt.replace("p", c("w"))
attempt = attempt.replace("a", c("r"))
attempt = attempt.replace("x", c("i"))
attempt = attempt.replace("v", c("s"))
attempt = attempt.replace("mm", c("a"))

print(attempt)
或:


我认为最好的解决办法是使用字典并反复阅读文本

text = "iyzzfwpmzcyawcixvwxvwciywpfavcwryvvm ywqafrwciywbfs fwhzymvywuywmpmaywcimcwciywrmvbmamgywimvwuyyswcfcmzzewgxvbfkyaygwsfwrfaywbfrrjsxbmcxfsvwvxsbywciyewmaywcwgms yafjvwqfawjvwuewciywpmewciywrfvcwhfhjzmawzyccyavwxswys zxviwmaywycmfxswviagzj"

d = {'z': 'l',
     'i': 'h', 
     'c': 't',
     'y': 'e',
     'w': "''",
     'f': 'o',
     'p': 'w', 
     'a': 'r',
     'x': 'i',
     'v': 's',
     'm': 'a'}

text_new = ''

for i in range(len(text)):
    try:
        text_new += d[text[i]].upper()
    except:
        text_new += text[i]

print(text_new)

我还破译了你的文本:

我认为最好的解决办法是使用字典并反复阅读文本

text = "iyzzfwpmzcyawcixvwxvwciywpfavcwryvvm ywqafrwciywbfs fwhzymvywuywmpmaywcimcwciywrmvbmamgywimvwuyyswcfcmzzewgxvbfkyaygwsfwrfaywbfrrjsxbmcxfsvwvxsbywciyewmaywcwgms yafjvwqfawjvwuewciywpmewciywrfvcwhfhjzmawzyccyavwxswys zxviwmaywycmfxswviagzj"

d = {'z': 'l',
     'i': 'h', 
     'c': 't',
     'y': 'e',
     'w': "''",
     'f': 'o',
     'p': 'w', 
     'a': 'r',
     'x': 'i',
     'v': 's',
     'm': 'a'}

text_new = ''

for i in range(len(text)):
    try:
        text_new += d[text[i]].upper()
    except:
        text_new += text[i]

print(text_new)

我还破译了你的文字:

试试
\x1b
而不是
\033
。它在MacOS终端中工作。如果您在Windows上安装了Colorama@YuriKhristich模块,您是否尝试替换m?我的问题是替换m,因此尝试此尝试=尝试。替换(“m”,c(“a”))无效。您可以检查并查看try
\x1b
,而不是
\033
。它在MacOS终端中工作。如果您在Windows上安装了Colorama@YuriKhristich模块,您是否尝试替换m?我的问题是替换m,因此尝试此尝试=尝试。替换(“m”,c(“a”))不起作用你可以检查看当用a替换m时,它不起作用你能解释为什么它是mm到ma而不是m到aal吗?我试过使用colorma我把你函数的return语句改为return Fore.RED+字符,这只是在某个时刻把整个文本涂成了红色
]31mm
并且它将
m
更改为
a
。因此,您得到的是
]31aa
而不是
]31ma
我刚刚运行了代码,这就是我在将mm替换为aa而不是walter时得到的结果,我得到了w[0[31mmalter当用a替换m时,它不起作用。你能解释一下为什么它是mm到ma而不是m到aal吗?因此我尝试使用colorma我将函数的return语句改为return Fore.RED+字符,这只是将整个文本涂成了红色,在某个时刻文本看起来像
]31mm
并且它将
m
更改为
a
。因此,您得到的是
]31aa
而不是
]31ma
我刚刚运行了代码,这是我在将mm替换为aa而不是得到walter时得到的结果,我得到了w[0[31mm]滤波器