【问题标题】:Python splitting strings and jumbling the middlePython 拆分字符串并打乱中间
【发布时间】:2012-10-23 15:16:38
【问题描述】:

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

word = input("Enter a word")

first_letter = word[0]

last_letter = word[-1]

still_to_scramble = word[1:-1]

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

【问题讨论】:

    标签: python string split


    【解决方案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
    

    【讨论】:

    • random.shuffle 可以正常工作——换句话说,它不适用于字符串。你需要类似 ` scramble = list(word[1:-1]);洗牌(打乱); print '{0}{1}{2}'.format(first,''.join(scramble),last)`
    • 单线:'{0}{1}{2}'.format(s[0], ''.join(random.sample(s[1:-1], len(s)-2)), s[-1])
    【解决方案2】:

    我添加了一个正则表达式来扩展上面 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-28
      • 2021-10-31
      • 1970-01-01
      • 2023-01-03
      • 2020-12-01
      • 1970-01-01
      • 2010-09-30
      • 1970-01-01
      相关资源
      最近更新 更多