Python - 打乱句子顺序

-2 投票
2 回答
2217 浏览
提问于 2025-04-18 01:15

我正在尝试创建一个程序,可以把单词和句子打乱。我已经有了打乱单词的代码,但我不知道怎么去打乱一个句子。有没有什么建议?

import random

def main():
    word = input("Please enter a word or a sentence (if sentence, add a period to end the sentence: ")
    if "." in word:
        print(scramble(word))
    else:
        print(scrambleTwo(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

def scrambleTwo(word):


main()

2 个回答

0

你的代码有几个问题。一个是你可以打乱单个字母的单词,但你试了!你还想用 raw_input 而不是仅仅用 input。最后的窍门是使用 split 来获取每个单词,然后再进行打乱。下面是一个修改过的版本。

import random

def main():
    word = raw_input(
        "Please enter a word or a sentence "
        "(if sentence, add a period to end the sentence: ")
    if not "." in word:
        print(scramble(word))
    else:
        print(scrambleTwo(word))


def scramble(word):
    if len(word) < 2:
        return 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

def scrambleTwo(word):
    bits = word.split(" ")
    new_sentence_array = []
    for bit in bits:
        if not bit:
            continue
        new_sentence_array.append(scramble(bit))
    return " ".join(new_sentence_array)


main()
0

你需要用空格把你的句子split开,像这样:

word_list = sentence.split(" ")

然后把得到的数组打乱,方法和你打乱单词的方式类似。

scramble(word_list)

这需要一个不同的打乱函数,专门用来打乱数组,而不是字符串(不过逻辑基本上是一样的)。

撰写回答