如何打乱句子中的单词 - Python

1 投票
2 回答
22546 浏览
提问于 2025-04-17 20:42

我写了一个代码,可以把一个单词里的字母打乱(除了第一个和最后一个字母),但是如果输入的是一句话,而不是一个单词,我该怎么把句子里的每个单词的字母也打乱呢?谢谢你的时间!

import random

def main():
    word = input("Please enter a word: ")
        print(scramble(word)) 

def scramble(word):
    char1 = random.randint(1, len(word)-2)
    char2 = random.randint(1, len(word)-2)
    while char1 == char2:
        char2 = random.randint(1, len(word)-2)
    newWord = ""

    for i in range(len(word)):
        if i == char1:
            newWord = newWord + word[char2]
        elif i == char2:
        newWord = newWord + word[char1]

        else:

            newWord = newWord + word[i]

    return newWord

main()

2 个回答

2

split 方法把句子分割成一个单词(还有一些标点)的列表:

words = input().split()

然后基本上可以做你之前做的事情,只不过这次用的是列表而不是字符串。

word1 = random.randint(1, len(words)-2)

...

newWords = []

...

newWords.append(whatever)

不过,有比你现在做的更有效的方法来交换内容:

def swap_random_middle_words(sentence):
    newsentence = list(sentence)

    i, j = random.sample(xrange(1, len(sentence) - 1), 2)

    newsentence[i], newsentence[j] = newsentence[j], newsentence[i]

    return newsentence

如果你想把你的一字混乱应用到句子的每个单词上,可以用循环或者列表推导来实现:

sentence = input().split()
scrambled_sentence = [scramble(word) for word in sentence]

如果你想完全随机打乱中间字母(或单词)的顺序,而不仅仅是交换两个随机的字母(或单词),那么 random.shuffle 函数可能会很有用。

4

我可以推荐你使用 random.shuffle() 吗?

def scramble(word):
    foo = list(word)
    random.shuffle(foo)
    return ''.join(foo)

如果你想打乱单词的顺序,可以这样做:

words = input.split()
random.shuffle(words)
new_sentence = ' '.join(words)

如果你想打乱句子中的每个单词,但保持单词的顺序不变,可以这样:

new_sentence = ' '.join(scramble(word) for word in input.split())

如果你需要保持每个单词的第一个和最后一个字母不变,可以这样:

def scramble(word):
    foo = list(word[1:-1])
    random.shuffle(foo)
    return word[0] + ''.join(foo) + word[-1]

撰写回答