我在python程序中遇到问题...我需要程序在保持外部两个字母完整的同时混淆单词的中间部分...我相信我已成功将单词分成三个不同的部分,我只是无法弄清楚我应该如何争夺这个词的中间部分
word = input("Enter a word")
first_letter = word[0]
last_letter = word[-1]
still_to_scramble = word[1:-1]
我应该使用randoms吗?或者有一个简单的方法,抱歉,我对编码相对较新。
答案 0 :(得分: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
答案 1 :(得分:0)
我添加了一个正则表达式来扩展Burhan Khalid的解决方案。这个添加适用于多个单词的输入,我认为有些可能会有用。
$ 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
输入字符串混乱:我只是输入一些任意字符串
我是jsut etnrneig aabtrrriy sritng
注意:上面的示例是在Red Hat Enterprise Linux 6.7系统上完成的,默认为python-2.6.6-64.el6.x86_64