我在使用 python 中的程序时遇到问题...我需要程序在保持外部两个字母完整的同时混淆单词的中间...我相信我已经成功地将单词分成三个不同的部分,我只是不能弄清楚我应该如何打乱单词的中间
word = input("Enter a word")
first_letter = word[0]
last_letter = word[-1]
still_to_scramble = word[1:-1]
我应该使用随机数吗?或者有没有简单的方法,对不起,我对编码比较陌生。
您可以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
我添加了一个正则表达式来扩展上面 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 some aabtrrriy sritng
注意:以上示例是在 Red Hat Enterprise Linux 6.7 系统上完成的,默认为 python-2.6.6-64.el6.x86_64