Python 需要帮助修复用于循环和列表的随机句子生成器吗
我正试图编写一个程序,通过使用random.choice、variables和list来形成随机语句,这些语句可以反复传递给for循环,每次生成不同的输出。一个例子如下所示: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
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个结果。感谢很多人,这真的简化了事情,我的代码让我非常头疼!