使句子生成器程序成为可选的

时间:2012-03-29 21:56:40

标签: python

这是句子生成器程序的代码。它要求用户制作介词短语,这是可选的(它可以以一定的概率出现。)我不知道如何使短语成为可选的。

import random

articles = ("A", "THE")    
nouns = ("BOY", "GIRL", "BAT", "BALL",)    
verbs = ("HIT", "SAW", "LIKED")    
prepositions = ("WITH", "BY")

def sentence():    
     """Builds and returns a sentence."""
    return nounPhrase() + " " + verbPhrase()

def nounPhrase():    
    """Builds and returns a noun phrase."""
    return random.choice(articles) + " " + random.choice(nouns)

def verbPhrase():    
    """Builds and returns a verb phrase."""
    return random.choice(verbs) + " " + nounPhrase() + " " + prepositionalPhrase()

def prepositionalPhrase():    
    """Builds and returns a prepositional phrase."""
    return random.choice(prepositions)+ " " + nounPhrase()

def main():    
    """Allows the user to input the number of sentences to generate."""
    number = input("Enter the number of sentences: ")
    for count in xrange(0, number):
        print sentence()

main()

2 个答案:

答案 0 :(得分:1)

你可以重写你的介词函数,看起来像这样:

def prepositionalPhrase(chance = 0.5):
    """Builds and returns a prepositional phrase."""
    return random.choice(prepositions)+ " " + nounPhrase() if random.random() < chance else ""

random.random()函数返回0到1之间的随机数,这里我们有一个参数机会,默认值为0.5(50%),如果随机数为0,则返回random.choice(prepositions) + " " + nounPhrase() 0到1小于偶然,否则它将返回一个空字符串。您不必将值传递给此函数preprositionalPhrase,因为如果不这样做,它将只使用默认值0.5。如果你想做一些与这个解决方案略有不同的事情,希望我的回答能为你提供一个起点,帮助你形成自己的解决方案。

答案 1 :(得分:0)

您可以让您的用户传入命令行参数,说明他们是否需要介词短语,然后使用OptionParser解析它。

parser = OptionParser()
parser.add_option("-p", "--preposition", dest="prep_phrase", help="Give me a sentence with a prepositional phrase")
...
(options, args) = parser.parse_args()
if options.prep_phrase:
    ...

然后你的用户会用“./create_sentence.py -p”调用该程序,如果他们在句子中想要一个介词短语。