Python 需要帮助修复用于循环和列表的随机句子生成器吗

Python 需要帮助修复用于循环和列表的随机句子生成器吗,python,Python,我正试图编写一个程序,通过使用random.choice、variables和list来形成随机语句,这些语句可以反复传递给for循环,每次生成不同的输出。一个例子如下所示: list_0 = ["string1", "string2", "string3", "string4"] variable_0 = random.choice(list_0) list_1 = ["string1", "string2", "string3", "string4"] variable_1 = rando

我正试图编写一个程序,通过使用random.choice、variables和list来形成随机语句,这些语句可以反复传递给for循环,每次生成不同的输出。一个例子如下所示:

list_0 = ["string1", "string2", "string3", "string4"]
variable_0 = random.choice(list_0)

list_1 = ["string1", "string2", "string3", "string4"]
variable_1 = random.choice(list_1)

list_2 = ["string1", "string2", "string3", "string4"]
variable_2 = random.choice(list_2)
在我形成主语、连词、名词、动词等的列表之后,我将它们传递给变量,这些变量相当于所述列表中的一个随机选择。在这一点上,有两种方法可以打印句子,其想法是程序将从每个列表中选择一个随机单词,并按_0 _1和_2的顺序打印出来,因此句子将是随机的,但符合语法。 我试着列出所有的变量,然后像这样随机化

list_3 = [list_0, list_1, list_2]
random.choice(list_3)
然而,这将一次只打印一个选项,我需要整个随机句子,所以我尝试了

list_3 =  [list_0 + list_1 + list_2]
虽然这会打印整个随机句子,但一旦它进入for循环,它在停止之前只打印一次,我认为这是因为它不会被要求多次求值,例如:

for line in list_3:
    try:
        print(line)
        if line !='\n':
            #do function
            sleep(10)
        else:
            pass
    except:
            #do function
            sleep(2) 
即使使用sleep函数,脚本也会在1次迭代后停止,因此我在顶部尝试了一个“while True”循环,虽然这迫使函数多次打印,但输出是重复的,而不是另一个随机句子。例如:

while True:    
    for line in list_3:
      try:
        print(line)
        if line !='\n':
            do function
            sleep(10)
        else:
            pass
      except:
            #do function
            sleep(2)

这就是我被卡住的地方,从我所看到的随机函数只是将一个随机句子传递给for循环,所以当while循环再次运行for循环时,它只打印上一个句子。对于每个新的迭代,我能做些什么来传递一个不同于前一个句子的for循环?我很想得到帮助,因为我还是一个新手。

请尝试在while循环之外的顶部添加注释或删除的代码

while True:  
    list_0 = ["string1", "string2", "string3", "string4",]
    variable_0 = random.choice(list)

    list_1 = ["string1", "string2", "string3", "string4",]
    variable_1 = random.choice(list)

    list_2 = ["string1", "string2", "string3", "string4",]
    variable_2 = random.choice(list)
    list_3 =  [list_0 + list_1 + list_2]
    for line in list_3:
      try:
        print(line)
        if line !='\n':
            do function
            sleep(10)
        else:
            pass
      except:
            #do function
            sleep(2)

以下是一个简明的版本:

import random

words = [["Two","Three", "Four"],
         ["red","yellow","green"],
         ["cats","dogs","zebras"],
         ["jumped.", "danced.", "wrote poetry."]]

for i in range(5):
    print( ' '.join([random.choice(w) for w in words]))
典型输出:

Three yellow cats jumped.
Three yellow zebras jumped.
Four red zebras jumped.
Two green zebras danced.
Four green dogs wrote poetry.
请注意如何直接创建列表列表,而不必将内部列表指定给变量

理解代码的关键是理解列表理解

[random.choice(w) for w in words]
这本质上是对以下内容的语法分析:

sentence = []
for w in words:
    sentence.append(random.choice(w))

最后,使用“.”join是一种很好的方法,可以获取单词列表并用空格将它们连接在一起。

所以我应该将整个代码包装在while循环中?我想我有点困惑,因为列表3只包含1个元素,随机。选择永远不会返回超过1个结果。感谢很多人,这真的简化了事情,我的代码让我非常头疼!