用python生成随机句子

用python生成随机句子,python,python-3.x,random,Python,Python 3.x,Random,我对python和编程非常陌生 我需要写一个程序,它有4个元组,每个元组有5个元素。一个元组应该有动词,一个元组应该有名词,一个元组应该有形容词,一个元组应该有副词。然后我必须使用0到4之间随机生成的数字从每个元组中选择一个元素。这就是我到目前为止所做的: import random nouns = ("puppy", "car", "rabbit", "girl", "monkey") verbs = ("runs", "hits", "jumps", "drives", "barfs")

我对python和编程非常陌生

我需要写一个程序,它有4个元组,每个元组有5个元素。一个元组应该有动词,一个元组应该有名词,一个元组应该有形容词,一个元组应该有副词。然后我必须使用0到4之间随机生成的数字从每个元组中选择一个元素。这就是我到目前为止所做的:

import random

nouns = ("puppy", "car", "rabbit", "girl", "monkey")
verbs = ("runs", "hits", "jumps", "drives", "barfs") 
adv = ("crazily.", "dutifully.", "foolishly.", "merrily.", "occasionally.")
adj = ("adorable", "clueless", "dirty", "odd", "stupid")
num = random.randrange(0,5)
print (num)

有人能告诉我我做错了什么吗?

如果要为每个元组选择始终相同的索引,请尝试以下操作:

import random
idx = random.randrange(0, 5)
print ("%s %s %s %s"%(nouns[idx], verbs[idx], adv[idx], adj[idx]))
如果要为每个元组获取随机元素,则应使用以下方法:

import random
print("%s %s %s %s"%(random.choice(nouns), random.choice(verbs), random.choice(adv), random.choice(adj))
只给你生成的随机数。您需要使用像这样生成的随机数访问元组

print(nouns[num])
print(verbs[num])
print(adv[num])
print(adj[num])

您可以在列表中使用
random.choice
,然后将所选列表与
join
连接起来:

>>> l=[nouns,verbs,adj,adv]
>>> ' '.join([random.choice(i) for i in l])
'girl runs dirty crazily.'
>>> ' '.join([random.choice(i) for i in l])
'monkey hits clueless occasionally.'

最简单的理解方法是:

import random

nouns = ("puppy", "car", "rabbit", "girl", "monkey")
verbs = ("runs", "hits", "jumps", "drives", "barfs") 
adv = ("crazily.", "dutifully.", "foolishly.", "merrily.", "occasionally.")
adj = ("adorable", "clueless", "dirty", "odd", "stupid")
num = random.randrange(0,5)
print nouns[num] + ' ' + verbs[num] + ' ' + adv[num] + ' ' + adj[num]

我会这样做,使用random.choice,因为它比random.randrange更好

words = (adj, nouns, verb, adv)
sentence = "".join(choice(word) for word in words)

对于与返回所有可能排列的已接受答案类似的函数:

import random

def make_random_sentence():
  nouns = ["puppy", "car", "rabbit", "girl", "monkey"]
  verbs = ["runs", "hits", "jumps", "drives", "barfs"]
  adv = ["crazily.", "dutifully.", "foolishly.", "merrily.", "occasionally."]
  adj = ["adorable", "clueless", "dirty", "odd", "stupid"]

  random_entry = lambda x: x[random.randrange(len(x))]
  return " ".join([random_entry(nouns), random_entry(verbs), random_entry(adv), random_entry(adj)])

random.choice
是从列表、元组或类似容器中选择一个随机对象。 最后一行做的是从每个列表中选择一个随机项,然后从这些选项中创建一个新列表。然后,该列表被打印出来。在一个循环中,无论用户输入多少次,都要执行X次

from random import choice 

nouns = ("puppy", "car", "rabbit", "girl", "monkey")
verbs = ("runs", "hits", "jumps", "drives", "barfs") 
adv = ("crazily.", "dutifully.", "foolishly.", "merrily.", "occasionally.")
adj = ("adorable", "clueless", "dirty", "odd", "stupid")

# asking user as to how many sentences he would like to generate 
for _ in range (int (input ("Enter integer value :"))): 
    print(list(map(choice, [nouns, verbs, adv, adj])))

您可以使用该随机数从每个元组中选择相应的元素。例如:
print nomes[num]
一个更好的解决方案是使用
random.choice(nomes)
…但是如果你的作业要求你使用
random.randrange
,那么你必须按照@ρss建议的方式来做。我同意@abarnert注意,使用这种方法,只有5个可能的句子,若你们为每个单词选择一个随机数,你们的答案看起来不错,但可以用一点文字来支持,而不是625个可能的句子。请看一下:如果你需要帮助的话。谢谢,让我知道是否可以。是的,很好。嗨,这个答案已经被回答了。如果您没有额外的补充,请考虑删除它。
from random import choice 

nouns = ("puppy", "car", "rabbit", "girl", "monkey")
verbs = ("runs", "hits", "jumps", "drives", "barfs") 
adv = ("crazily.", "dutifully.", "foolishly.", "merrily.", "occasionally.")
adj = ("adorable", "clueless", "dirty", "odd", "stupid")

# asking user as to how many sentences he would like to generate 
for _ in range (int (input ("Enter integer value :"))): 
    print(list(map(choice, [nouns, verbs, adv, adj])))
Enter integer value :2
['car', 'barfs', 'dutifully.', 'odd']
['rabbit', 'runs', 'occasionally.', 'clueless']

[Program finished] 
import random
nouns = ("puppy", "car", "rabbit", "girl", "monkey")
verbs = ("runs", "hits", "jumps", "drives", "barfs") 
adv = ("crazily.", "dutifully.", "foolishly.", "merrily.", "occasionally.")
adj = ("adorable", "clueless", "dirty", "odd", "stupid")
num = random.randrange(0,5)
print(nouns[num],verbs[num],adv[num],adj[num])