需要帮助修复一个使用for循环和列表

时间:2017-03-25 22:03:53

标签: python

我试图编写一个程序,它将形成随机句子,可以通过使用random.choice(),变量和列表来重复传递给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) 

即使使用睡眠功能,脚本在1次迭代后停止,因此我尝试了“真实”和“真实”。在顶部循环,虽然这不止一次强制打印功能,输出是重复而不是另一个随机句子。例如:

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循环传递一个与前一个不同的句子?我很乐意帮助我仍然很新。

2 个答案:

答案 0 :(得分:1)

这是一个简洁的版本:

Y-m-d H:i:s

典型输出:

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)) 是获取单词列表并将它们连接在一起的好方法。

答案 1 :(得分:-1)

尝试使用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)