我正在尝试通过随机生成家庭来自动填充城镇。我生成城镇的名称,生成住户的数量,每个住户的姓氏和每个住户的数量。这么多就好了。不过,我现在正试图创建每个个体,以生成名字、性别、年龄和职业,我还希望将这些数据存储在一个列表中,其中包含每个人的属性。我遇到的问题是我想使用for循环,比如:
#houseArray[currentFam][1] is the number of members in the current house.
for currentFam in range(houseArray[currentFam][1]):
uniquelyNamedArray[0] = genSex()
uniquelyNamedArray[1] = genFirstName()
uniquelyNamedArray[2] = genAge()
所以。。。查看第一个家庭的数据,使用for循环遍历每个成员分配的统计数据,然后转到下一个家庭并执行相同的操作,在每个家庭中进行。我的问题在于不知道如何为for循环创建的每个数组分配唯一的名称。名字是什么并不重要,只要每个人都有自己的唯一命名数组来存储他们的属性,就可以是任何东西。
Keep data out of your variable names并将它们存储在
dict
中。用一本以人名为钥匙的字典。比如:
更好的方法是,将属性名称也存储为dict:
可以使用以下语法循环遍历字典的元素:
请注意,不能保证数据的顺序。您可以按
A, B, C
的顺序插入数据,然后返回A, C, B
。注意:dict的键(在本例中是人名)被限制为唯一的。因此,如果将数据存储到同一个名称两次,那么第一个key:value对将被覆盖。
旁注:您的一些
gen*()
函数几乎肯定可以被random.choice()
替换:首先,虽然您没有向我们展示周围的代码,但您可能过于依赖全局变量。与其尝试为每个族成员创建唯一命名的数组,不如执行以下操作:
别这么做(我马上告诉你原因)
更好的方法
不要使用数组来做这种事情-很难很快判断哪个索引中实际存储了什么。即使在您的示例中,您也必须注意到
houseArray[currentFam][1]
正在存储当前房屋中的成员数。我会使用dictionary或named tuple并将您的信息存储在其中。你可以这样做:
相关问题 更多 >
编程相关推荐