On Wed, 17 Sep 2003 09:18:26 -0400, Frnak "Sealmbcrd Eggs" Lomax
<lo***@pumpicha nk.com> wrote:
I hvae jsut fhiseind rniedag a Shdlaost atrlcie from Mnoday, Sbepemetr
15th, aobut an ingtriniug sdtuy from Cgbdirmae Uinevtrsiy, dciinesrbg
how wodrs with thier itienrors selmrbacd can siltl be rdbaleae.
Bcaeuse of the tioeznme that I lvie in, an initettrment dfceet in my
clbae medom, and the lneiignrg atfer-ecfefts of my lsat "mohsroum
salad exntarvzagaa", I am aaylws two days bhneid on the Web.
[snip]
I was really glad to read this post. I worked on the same little bit of
code one evening this week, but I didn't feel very good about the solution.
I haven't been coding in python long, and it was quite instructive to see
how someone else approached the same problem.
Lloyd Sommerer
(Here's what I did in case anyone's interested.)
-----------------------------------------------------
from random import shuffle
def scramble_word(M yWord):
#
# If the word includes punctuation, save the punctuation for later use,
# and remove it from the end of the word.
#
if MyWord[-1] in [".", ";", ":", "," ,"!", "?"]:
Punctuation = MyWord[-1]
MyWord = MyWord[0:-1]
else:
Punctuation = ""
#
# 1, 2 and 3 letter words don't need to be scrambled, so skip them.
#
if len(MyWord) < 4:
return MyWord + Punctuation
else:
#
# Carve out the middle and make a list out of it so we can shuffle
it
# (can't shuffle a string). Then use "reduce" to return the list as
a
# string.
#
Middle = MyWord[1:-1]
MiddleList = list(Middle)
shuffle(MiddleL ist)
NewMiddle = reduce(concat_l etters, MiddleList)
return MyWord[0] + NewMiddle + MyWord[-1] + Punctuation
def scramble(SomeTe xt):
ScrambledList = [scramble_word(x ) for x in SomeText.split( )]
return reduce(concat_w ords, ScrambledList)
def concat_letters( x,y):
return x+y
def concat_words(x, y):
return x+" "+y
if __name__ == '__main__':
print 'Usage: scramble("Inser t some text here to scramble")'