[Tutor] Eng to Leet Speek
Chris Castillo
ctcast at gmail.com
Mon Jul 27 21:23:28 CEST 2009
On Mon, Jul 27, 2009 at 2:08 PM, Dave Angel <davea at ieee.org> wrote:
> Chris Castillo wrote:
>
>> so I have a string:
>>
>> 1 4|-| 50 |_33+. I love [#ick3n 4nd ch3353. Don't you love +|_|2|\e7
>> \/\/1+# the |#a|-|i|_7?
>>
>>
>> and I am trying to turn it into english with the following code:
>>
>> fileIn = open("encrypted.txt", "r").read()
>>
>> def eng2leet(astring):
>> astring = astring.replace("4","a")
>> astring = astring.replace("8","b")
>> astring = astring.replace("[","c")
>> astring = astring.replace("|)","d")
>> astring = astring.replace("3","e")
>> astring = astring.replace("|#","f")
>> astring = astring.replace("6","g")
>> astring = astring.replace("#","h")
>> astring = astring.replace("1","i")
>> astring = astring.replace("]","j")
>> astring = astring.replace("|\\","k")
>> astring = astring.replace("|_","l")
>> astring = astring.replace("|-|","m")
>> astring = astring.replace("|\\","n")
>> astring = astring.replace("0","o")
>> astring = astring.replace("|*","p")
>> astring = astring.replace("0\\","q")
>> astring = astring.replace("2","r")
>> astring = astring.replace("5","s")
>> astring = astring.replace("+","t")
>> astring = astring.replace("|_|","u")
>> astring = astring.replace("\/","v")
>> astring = astring.replace("\/\/","w")
>> astring = astring.replace("><","x")
>> astring = astring.replace("7","y")
>> astring = astring.replace("7_","z")
>> return astring
>>
>> print eng2leet(fileIn)
>>
>> Only problem is that when it needs to translate a U or a W it prints an L
>> or
>> 2 V's. Need some help please. Thanks
>>
>>
>>
> Your problem is in the order of substitution. If you put the "v" test
> *after* the "w" test, you'll avoid one of your problems. And put the "l"
> test after the "u" test. And you didn't mention it, but "z" should come
> before "y". This is because some of your strings are substrings of others.
> A more general rule might be to put all the four-character substitutions
> first, then do all the three-character ones, then two, then one. That's not
> guaranteed to work, but by inspection I think it will.
>
> Another problem that could have hit you is that "\" is an escape character
> in strings. So you're taking advantage of the fact that \/ (for example)
> doesn't happen to be a valid escape sequence. The usual workaround is to
> use raw strings. For another example, look at the string for "n". Did you
> want two backslashes? You'll only get one as it sits.
>
> Did you mean for "k" and "n" to be the same?
>
> DaveA
>
> Yes that solved it and caught all exceptions (after changing the typo I had
for the n) I really did not think about changing the order like that. I feel
stupid for not thinking of that. Thank you for your insight.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20090727/d9f584c7/attachment.htm>
More information about the Tutor
mailing list