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

_______________________________________________
Tutor maillist  -  [email protected]
http://mail.python.org/mailman/listinfo/tutor

Reply via email to