python - 在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)
解决方案
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)
推荐阅读
- c++ - 前后增量
- javascript - 将状态数组值转换为键值对
- r - 带有 networkD3 的桑基图 - 创建链接
- java - Antlr 语法无法提供所需的 AST
- python - 将响应类型更改为 str、bytes 或 os.Pathlike
- java - JavaFX FXMLLoader InvocationTargetException 和 NullpointerException
- php - 方法 Illuminate\Database\Query\Builder::languages 不存在
- python - 将时间戳添加到分钟
- javascript - chartjs-vue 图表为空
- angular - 如何将 ReSharper 与 WebStorm 集成