0

我正在用 python 编写一个游戏,我必须定期从单词列表中提取一个随机单词。当我为我的游戏制作原型时,我在我word_list = ['cat','dog','rat','house']的一个模块的顶部声明了一个十个单词。然后我用choice(word_list)得到一个随机词。但是,我必须将这个临时的hack 改成更优雅的东西,因为我需要将单词列表的大小增加到5,000 多个单词。如果我在我当前的模块中这样做,它看起来会很荒谬。

我是否应该将所有这些单词放在一个平面 txt 文件中,然后在需要单词时从该文件中读取?如果是这样,我将如何最好地做到这一点?将每个单词单独放置一行,然后随机读取一行?我不确定最有效的方法是什么。

4

4 回答 4

4

我会将所有单词放在一个平面文本文件中,每行一个:

cat
dog
....

并在需要时使用以下单线将其加载:

word_list = [word.rstrip() for word in open("words.txt","r")]

请参阅:http ://docs.python.org/tutorial/datastructures.html#list-comprehensions

这个解决方案更优雅一点,因为它不依赖于任何东西,只依赖于内置函数。无需导入模块。

确保在加载后对其进行缓存,但您不希望每次需要新单词时都从文件中加载单词。

于 2012-06-24T22:44:33.963 回答
3

在启动时从文件中读取单词(或至少是行索引),并根据需要使用。

于 2012-06-24T21:08:38.993 回答
2

我将创建一个名为 random_words 的单独模块或类似的模块,将列表隐藏在其中并将其封装choice(word_list)在接口函数内部。

至于从文件中加载它们,好吧,因为无论如何我都需要输入它们,而python文件最终只是一个文本文件,我会在那里输入它们,可能每行一个以便于维护。

于 2012-06-24T21:13:04.950 回答
0

您可以将每个单词存储在文本文件中的单独行上,然后使用reader(从csv模块)在启动时将文件加载到列表中。然后,您可以从列表中随机选择一个单词:

import csv

FILENAME = 'word_list.txt'
word_list = []

# Open word list and get words
with open(FILENAME, 'rb') as f:
    reader = csv.reader(f)
    for row in reader:
        word_list.append(row)

即使有五千字,你也不应该超过五十千字节的 RAM,所以我认为这是一种有效的方法。

于 2012-06-24T21:17:05.640 回答