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