首页 > 解决方案 > 在python中重用函数

问题描述

我正在尝试创建一个非常简单的应用程序来填写 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)

标签: pythonpython-3.xfunctionrandom

解决方案


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)

推荐阅读