【问题标题】:Generate random sentences in python在python中生成随机句子
【发布时间】:2015-07-08 10:45:08
【问题描述】:

我对 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)

谁能告诉我我做错了什么?

【问题讨论】:

  • 您可以使用该随机数从每个元组中选择相应的元素。例如:print nouns[num]docs.python.org/2/tutorial/…
  • 更好的解决方案是使用random.choice(nouns)... 但如果你的任务要求你使用random.randrange,那么你必须按照@ρss 建议的方式进行。
  • 我同意@abarnert

标签: python python-3.x random


【解决方案1】:

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

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))

【讨论】:

    【解决方案2】:
    num = random.randrange(0,5)   
    print (num)
    

    只是给你你生成的随机数。您需要使用像这样生成的随机数来访问元组。

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

    【讨论】:

    • 请注意,使用此方法,如果您为每个单词选择一个随机数,则只有 5 个可能的句子,而不是 625 个可能的句子(this other answer 的问题相同。
    【解决方案3】:

    您可以在列表理解中使用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.'
    

    【讨论】:

      【解决方案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 nouns[num] + ' ' + verbs[num] + ' ' + adv[num] + ' ' + adj[num]
      

      【讨论】:

      • 请注意,使用此方法,如果您为每个单词选择一个随机数,则只有 5 个可能的句子,而不是 625 个可能的句子。
      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

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

        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)])
        

        【讨论】:

          【解决方案7】:

          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])))
          
          Enter integer value :2
          ['car', 'barfs', 'dutifully.', 'odd']
          ['rabbit', 'runs', 'occasionally.', 'clueless']
          
          [Program finished] 
          

          【讨论】:

            【解决方案8】:

            这是一个简单的句子,如果您想要多个句子,请使用:

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

            【讨论】:

              猜你喜欢
              • 2020-02-16
              • 2011-09-24
              • 2021-04-18
              • 2016-02-16
              • 2013-11-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多