作为对于更一般解决方案的另一个答案(主要是作为Nick ODell's answer的补充),如果你想处理任意数量的名称,这是一个非常简单的解决方案,使用无限生成器即可:
import string
import itertools
def generate_names(characters):
for i in itertools.count(1):
for name in itertools.product(characters, repeat=i):
yield "".join(name)
然后,您可以像使用其他生成器一样使用它:
>>>print(dict(zip(generate_names(string.ascii_lowercase), range(30))))
{'aa': 26, 'ac': 28, 'ab': 27, 'ad': 29, 'a': 0, 'c': 2, 'b': 1, 'e': 4, 'd': 3, 'g': 6, 'f': 5, 'i': 8, 'h': 7, 'k': 10, 'j': 9, 'm': 12, 'l': 11, 'o': 14, 'n': 13, 'q': 16, 'p': 15, 's': 18, 'r': 17, 'u': 20, 't': 19, 'w': 22, 'v': 21, 'y': 24, 'x': 23, 'z': 25}
如果您需要生成实际的 名称,那么您有几个选择。如果您需要一个真实的单词,请从字典文件中选择(大多数 Linux 用户在 /usr/share/dict
中都有一个)。如果您需要类似于单词的东西,那么我实际上编写了使用马尔可夫链生成这样的“单词”的 Python 脚本,该脚本在 GPL 下可用。当然,您需要检查这些是否唯一。
Level
对象中的“generate_rooms()方法。在调试时,我将该代码置于
__init __()下,以简化测试部分,这样我只需创建
Level类并查看所做的任何更改是否符合我的要求。从某种意义上说,我正在尝试形成一个容器,其中包含我需要引用的对象;在
desert.Level()`上,我可以轻松访问单个沙漠房间以及“沙漠全局变量”(缺乏更好的术语)。 - Kay Dee