1

我在使用 python 中的程序时遇到问题...我需要程序在保持外部两个字母完整的同时混淆单词的中间...我相信我已经成功地将单词分成三个不同的部分,我只是不能弄清楚我应该如何打乱单词的中间

word = input("Enter a word")

first_letter = word[0]

last_letter = word[-1]

still_to_scramble = word[1:-1]

我应该使用随机数吗?或者有没有简单的方法,对不起,我对编码比较陌生。

4

2 回答 2

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
于 2012-10-23T15:19:49.580 回答
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 some aabtrrriy sritng

注意:以上示例是在 Red Hat Enterprise Linux 6.7 系统上完成的,默认为 python-2.6.6-64.el6.x86_64

于 2015-12-11T18:52:39.397 回答