【发布时间】:2012-03-17 11:49:41
【问题描述】:
例子:
element = ['Flaming', 'Cold']
fire_properties = ['of Fire', 'of Flame']
cold_properties = ['of Ice', 'of Frost']
相当简单。想要根据这个例子制作一个文本随机化器并最终得到诸如“火焰之剑”之类的结果。不幸的是,我不确定如何做到这一点,以便第一个列表的结果将定义第二个结果将来自哪个列表。
【问题讨论】:
例子:
element = ['Flaming', 'Cold']
fire_properties = ['of Fire', 'of Flame']
cold_properties = ['of Ice', 'of Frost']
相当简单。想要根据这个例子制作一个文本随机化器并最终得到诸如“火焰之剑”之类的结果。不幸的是,我不确定如何做到这一点,以便第一个列表的结果将定义第二个结果将来自哪个列表。
【问题讨论】:
这样的解决方案怎么样:你构建一个形容词和名词的可能组合的映射并选择其中一个:
weapon_map = {"Flaming": ["Fire", "Inferno"], "Frozen": ["Cold", "Frost"]}
selection = random.choice(weapon_map.items())
print (selection[0] + " of " + random.choice(selection[1]))
这种方法更容易维护和理解。
【讨论】:
嗯,这是我第一次写的,但鲍里斯的更简洁,所以我决定不提交……不过,对于初学者来说可能更具可读性。
quality_list = ['Flaming', 'Frozen', 'etc.']
quality = random.choice(quality_list)
item_list = ['Sword', 'Dagger', 'Mace', 'etc.']
item = random.choice(item_list)
hot_qualities = ['Flaming', ...]
cold_qualities = ['Frozen', ...]
hot_elements = ['Fire', 'Inferno']
cold_elements = ['Cold', 'Frost']
if quality in hot_qualities:
element = random.choice(hot_elements)
elif quality in cold_qualities:
element = random.choice(cold_elements)
# NB this is Python 2.X's print and string format, adjust accordingly for 3.X
print "%s %s of %s" % (quality, item, element)
虽然在实际项目中,我会像鲍里斯那样进一步概括它。
【讨论】: