Python - 随机翻转除第一个和最后一个单词之外的单词中的2个字符

时间:2016-07-15 06:24:39

标签: python python-2.7

此代码翻转除第一个和最后一个字符之外的单词中的所有字符。如何制作它以便它只是随机翻转除了第一个和最后一个字符之外的两个字符?

例如:

computers
cmoputers
comupters
compuetrs

代码:

def scramble(word):
    result = word[0]

    if len(word) > 1:
        for i in range(len(word) - 2, 0, -1):
            result += word[i]

        result += word[len(word) - 1]

    return result


def main():
    print ("scrambled interesting python computers")
    print scramble("scrambled"),scramble("interesting"),scramble("python"), scramble("computers")

main()

3 个答案:

答案 0 :(得分:1)

尝试查看此代码是否适合您:

ind1

请注意,如果ind2恰好等于update,则可能没有切换。如果这不是傻瓜,你应该检查这种情况。

答案 1 :(得分:1)

这应该可以翻转两个字母。如果单词的长度小于或等于3,则不能翻转。在这种情况下,它只会返回单词。

from random import randint

def scramble(word):
    if len(word) <= 3:
        return word
    word = list(word)
    i = randint(1, len(word) - 2)
    word[i], word[i+1] = word[i+1], word[i]
    return "".join(word)

如果要切换两个随机字母,可以执行以下操作:

from random import sample

def scramble(word):
    if len(word) <= 3:
        return word
    word = list(word)
    a, b = sample(range(1, len(word)-1), 2)
    word[a], word[b] = word[b], word[a]
    return "".join(word)

答案 2 :(得分:0)

以下仅使用标准库。此外,它总是从字符串内部选择2个不同的字符。

import random
def scramble2(word):
    indx = random.sample(range(1,len(word)-1), 2)
    string_list = list(word)
    for i in indx:
        string_list[i], string_list[-i+len(word)-1] = string_list[-i+len(word)-1], string_list[i]
    return "".join(string_list)

另外,你需要处理len(word)&lt; = 3的情况:在这种情况下,random.sample方法会抛出一个ValueError,因为它没有足够的项来进行采样(它的样本没有替代品)。一种方法是在这些情况下返回单词。

def scramble2(word):
    try:
        indx = random.sample(range(1,len(word)-1), 2)
    except ValueError:
        return word
    string_list = list(word)
    for i in indx:
        string_list[i], string_list[-i+len(word)-1] = string_list[-i+len(word)-1], string_list[i]
    return "".join(string_list)