我正在做一个目标是创建两个程序的项目。一个程序读取用户的输入并将其转换为Leetspeak,而另一个程序将Leetspeak转换回英语。而不是垃圾邮件If语句或替换(“”,“”)我决定尝试使用字典来处理翻译。
转换为Leetspeak非常简单。我只是使用了字典和for循环。
但是,由于Leetspeak中的“字母”有时会包含多个字符,因此我发现很难将其转换回来而不会出现KeyErrors。
这是我到目前为止所拥有的。
phrase = raw_input('Enter a phrase: ')
output = []
KEY = {
'4': 'A',
'8': 'B',
'(': 'C',
'|)': 'D',
'3': 'E',
'|=': 'F',
'6': 'G',
'|-|': 'H',
'!': 'I',
'_|': 'J',
'|<': 'K',
'1': 'L',
'|\/|': 'M',
'|\|': 'N',
'0': 'O',
'|D': 'P',
'(,)': 'Q',
'|?': 'R',
'5': 'S',
'7': 'T',
'|_|': 'U',
'\/': 'V',
'\/\/': 'W',
'><': 'X',
'`/': 'Y',
'2': 'Z',
' ': ' ',
}
for char in phrase:
if char in KEY:
# This line works perfectly, since it only requires a single
# character
print(KEY[char])
else:
while KEY[char] == False:
# If I'm not getting KeyErrors I'm getting errors with appending
# special characters or NoneType characters
output = output.append(char)
print(output)
# I tried clearing the output after every iteration so that it could be
# reused by the next char in phrase
output = []
# Understand that all of the prints() are for testing the program. I'm
# hoping to just have a single print() function at the end once everything
# has been translated.
如何转换所有这些Leetspeak字符?
至于为什么我选择不发送垃圾邮件如果声明和替换(“”,“”),我喜欢挑战自己的新概念。话虽如此,如果有必要的话,我总是以完全不同的方式开放。提前谢谢。
答案 0 :(得分:1)
message = 'HALLOWEEN'
KEY_reversed = {v:k for k, v in KEY.items()}
>>> print(''.join(KEY_reversed[c] for c in message))
|-|4110\/\/33|\|
向另一个方向迈进有点困难,但你可以用replace()
来做:
output = '|-|4110\\/\\/33|\\|'
for k, v in sorted(KEY.items(), key=lambda x: len(x[0]), reverse=True):
if k in output:
output = output.replace(k, v)
>>> output
'HALLOWEEN'
如果没有排序,V和W等字符可能会有歧义,并且由于字典没有默认排序,它们可能会出现不一致的歧义。
答案 1 :(得分:0)
我会生成一个键列表,并根据长度对它们进行排序(因此&#39; //&#39;将在列表中排在第一位)。一旦你有一个反向排序列表,你可以检查当前正在测试的密钥的字符串的开头,以进行反向翻译。
decodeString = ""
x = "! 4|\/| 31!73"
while len(x) > 0:
for currentSearch in keys:
if currentSearch in x[:len(currentSearch)]:
print(currentSearch)
decodeString += KEY[currentSearch]
x = x[len(currentSearch):]
print( decodeString)
I AM ELITE