python中函数的重用

python中函数的重用,python,python-3.x,function,random,Python,Python 3.x,Function,Random,我正在尝试创建一个非常简单的应用程序来填充Mad Libs。为此,我打开了几个包含我的名词、形容词等的文件。。并创建了一个函数,在给定的文件中随机选择一个单词。我可以很好地使用这个函数一次,但是如果我尝试在同一个文件上再次使用它,我会遇到一个与“随机”模块有关的“索引器:无法从空序列中选择”问题。 我怎样才能避免这种情况和我创建的函数呢。 这是我的密码: import random adjectives = open("data\\adjectives.txt", "r+") verbs =

我正在尝试创建一个非常简单的应用程序来填充Mad Libs。为此,我打开了几个包含我的名词、形容词等的文件。。并创建了一个函数,在给定的文件中随机选择一个单词。我可以很好地使用这个函数一次,但是如果我尝试在同一个文件上再次使用它,我会遇到一个与“随机”模块有关的“索引器:无法从空序列中选择”问题。 我怎样才能避免这种情况和我创建的函数呢。 这是我的密码:

import random


adjectives = open("data\\adjectives.txt", "r+")
verbs = open("data\\verbs.txt", "r+")
nouns = open("data\\nouns.txt", "r+")
colors = open("data\\colors.txt", "r+")
sports = open("data\\sportsgames.txt", "r+")


def randomize(file):
    return random.choice(file.readlines())

madlib = "One day I was playing {0}. I got bored so I played {1} 
instead.".format(randomize(verbs), randomize(verbs))

print(madlib)
file.readlines()
读取从文件中当前位置开始的行。第一次读取文件时,它将保留文件末尾的位置。因此,当您再次尝试使用它时,没有任何内容可供阅读,并且它返回一个空列表

您需要返回到文件的开头才能再次读取

def randomize(file):
    file.seek(0)
    return random.choice(file.readlines())
但是,如果只读取每个文件一次,而不是每次需要该类型的单词时都读取该文件,则会更简单

import random

adjectives = open("data\\adjectives.txt", "r+").readlines()
verbs = open("data\\verbs.txt", "r+").readlines()
nouns = open("data\\nouns.txt", "r+").readlines()
colors = open("data\\colors.txt", "r+").readlines()
sports = open("data\\sportsgames.txt", "r+").readlines()

def randomize(file):
    return random.choice(file)

madlib = "One day I was playing {0}. I got bored so I played {1} instead.".format(randomize(verbs), randomize(verbs))

print(madlib)