2012-10-23 32 views
1

我在Python中的程序遇到了麻烦......我需要程序混杂字的中间,同时保持外面的两个字母完好无损...我相信我已经成功地分割了这个词三个不同的部分,我只是想不通,我应该如何抢词蟒蛇分裂字符串和哗哗的中间

word = input("Enter a word") 

first_letter = word[0] 

last_letter = word[-1] 

still_to_scramble = word[1:-1] 

我应该使用随机量的中间?还是有一个简单的方法,对不起,我对编码相对来说比较陌生。

回答

4

您可以使用shuffle从随机包装:

import random 
letters = list(still_to_scramble) 
random.shuffle(letters) 
scrambled = ''.join(letters) 

下面是它的工作:

>>> s 
'$123abc$' 
>>> first_letter = s[0] 
>>> last_letter = s[-1] 
>>> middle_parts = list(s[1:-1]) 
>>> random.shuffle(middle_parts) 
>>> ''.join(middle_parts) 
'b3a2c1' 

要小心,不这样做:

>>> middle_parts_random = random.shuffle(middle_parts) 

shuffle在原地工作 - 这就是一种奇特的方式说它不会返回混洗的位,但是会改变它。它实际上返回None,你可能会被它绊倒了,因为你不会看到一个错误:

>>> 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 
+2

random.shuffle在适当的位置工作 - 在其他工作ds,它不会在字符串上工作。你需要像'scramble = list(word [1:-1]);洗牌(加扰);打印'{0} {1} {2}'。格式(第一,''。加入(争夺),最后)' – mgilson

+0

谢谢@mgilson –

+0

单行:''{0} {1} {2}'。格式(s [0],''.join(random.sample(s [1:-1],len(s)-2)),s [-1])' –

0

我添加了一个正则表达式来延长上述布尔汗哈立德的解决方案。这种补充适用于输入多个词,我认为有些词可能有用。

$ 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)) 

例如:
$ ./jumble.py
输入字符串混杂:我刚刚进入一些任意字符串
我仅仅指刚etnrneig一些aabtrrriy sritng

注:上面的例子是在红帽企业Linux 6.7系统上用默认的python-2.6.6-64.el6.x86_64