使用循环生成随机语句gen

2024-05-16 21:19:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我的Python技能非常基础,这就是为什么你要看一个可怕的烂摊子。在

基本上,我想用文本文件来列出单词列表。每个文件都有自己的单词类型(名词、动词等)。然后我想从列表中随机挑选单词,并将它们填入一个随机句子模板中的适当位置,有点像疯狂的Libs。我的问题是当我试图把所有的东西都放进一个循环中。我每次都会得到一个随机的模板,但是我不知道如何使随机选择的单词每次都发生变化。在

这是一个用于读取文件并将其内容添加到列表中的函数,它似乎可以正常工作。在

def get_Noun():
    infile = open('Noun.txt', 'r')
    nouns = infile.readlines()
    infile.close()

    index = 0
    while index < len(nouns):
        nouns[index] = nouns[index].rstrip('\n')
        index += 1
    Noun = random.choice(nouns)
    return Noun

接下来是两个句子模板的函数和一个随机选择其中一个的函数:

^{pr2}$

最后,我有一个控制整个事情的循环。我想把它放到另一个“main”函数中,但这似乎没有什么不同。在

while sp == '':
    get_Sentence()
    sp = input('')

我想要的是,每次我按enter键时都会弹出一个新的句子,里面有全新的单词。在

这是一个输出示例,如果我运行循环四次:

yak is the new frog

yak is the new frog

The yak is a frog

yak is the new frog

所选的句子似乎是随机的,但单词并没有改变。我该怎么解决这个问题?我知道我的代码是可怕的混乱和有点白痴,但我计划修复它,一旦我能让这一件事工作。我真的很感谢你的帮助。就像我说的,我是个十足的傻瓜,所以如果可能的话,简单的答案是值得感激的。在


Tags: 文件the函数模板列表newindexis
3条回答

在维克拉姆的回答中:

你的get_noun函数每次都会重新关联整个文件,这是一种浪费。 考虑使用一个函数将单词(只加载一次)加载到列表中,然后再使用一个从列表中随机选择的函数。在

最后:用choose_nun()替换所有名词和名词2。在

除了提供的所有答案之外,我想指出的是,在您的案例中,您需要将代码更改为

def Cake():
    print("The", get_noun(), "is a", get_noun())

def XistheNew():
    print(get_noun(), "is the new", get_noun())

def get_Sentence():
    num = random.randrange(1, 3)
    if num == 1:
        Cake()
    elif num == 2:
        XistheNew()

这样,当Cake()XistheNew()被调用时,一个新名词将从您的方法get_noun()中创建出来

注意:我把你的名词variable改成小写。就像Vikram所链接的那样,python编码风格也有一个约定。在

在Julien所说的基础上,您将添加另一个方法来加载该文件

^{pr2}$

这样就不会每次调用get_noun()时都加载文件,因此整个文件将如下所示

^{3}$

希望这有帮助

您只在程序初始化时分配nounnoun2一次

尝试使用如下新功能:

def set_nouns():
    noun = get_noun()
    noun2 = get_noun()

然后在你的Cake()XistheNew()函数中调用set_nouns(),而不是{}。在

另外,请通读python style guide。在

相关问题 更多 >