I am having trouble with a program in python...I need the program to jumble the middle of words while keeping the outer two letters intact...I believe I have successfully sp
I've added a regular expression to extend Burhan Khalid's solution above. This addition works for input with multiple words which I think some might find useful.
$ cat ./jumble.py
#!/usr/bin/env python
import re
import random
def jumble(s):
l = list(s)
random.shuffle(l)
return(''.join(l))
line = raw_input("Input string to jumble: ")
print(re.sub(r'\b(\w)(\w+)(\w)\b', lambda m: "".join([m.group(1),jumble(m.group(2)),m.group(3)]), line))
For example:
$ ./jumble.py
Input string to jumble: I am just entering some arbitrary string
I am jsut etnrneig some aabtrrriy sritng
Note: The above example was done on a Red Hat Enterprise Linux 6.7 system with the default python-2.6.6-64.el6.x86_64
You can use shuffle from the random package:
import random
letters = list(still_to_scramble)
random.shuffle(letters)
scrambled = ''.join(letters)
Here's how it would work:
>>> s
'$123abc$'
>>> first_letter = s[0]
>>> last_letter = s[-1]
>>> middle_parts = list(s[1:-1])
>>> random.shuffle(middle_parts)
>>> ''.join(middle_parts)
'b3a2c1'
Be careful and don't do this:
>>> middle_parts_random = random.shuffle(middle_parts)
shuffle works in place - that's a fancy way of saying it does't return the shuffled bit, but modifies it instead. It actually returns None, and you may get tripped up by it, since you won't see an error:
>>> middle_parts_random = random.shuffle(middle_parts)
>>> middle_parts_random # Huh? nothing is printed!
>>> middle_parts_random == None # Ah, that's why. Darn you in-place methods!
True