斜体文本可以跳过。

首先:请原谅我是不是要求我提供基本知识,也很容易找到答案,或者任何可能使我的帖子惹人讨厌的类似内容。我是编程的新手,它刚开始时有借口不阅读考试内容。
我正在尝试制作一个程序,该程序可以模仿从人类部落到高级人类部落的进化。我的目标是在将来的某个时候制作一款非常简单的类似于文明的游戏,专注于人而不是建筑物和单位。从头开始,目前对编程一无所知,我知道这是我可能永远不会完成的任务。希望我会在途中学到一些东西。
由于我的知识非常有限,因此我的问题将变得笨拙且公式化。对不起,感谢您的阅读。

当前问题:
我制作了一个类,该类制作了应该代表人的对象。

目前,该类如下所示:

class Settler:
    settlerCount = 0
    iqlistfemale = []
    iqlistmale = []
    maleCount = 0
    femaleCount = 0
    surnameMale = []
    surnameFemale = []

    def __init__(self, sex):
        if sex=="m" or sex=="f" or sex=="M" or sex=="F":
            self.name = choice(surnames)
            Settler.settlerCount += 1
            self.iq=round(random.normalvariate(100,10))
            if sex=="m" or sex=="M":
                self.sex = "Male"
                Settler.iqlistmale=Settler.iqlistmale+[self.iq]
                Settler.surnameMale += [self.name]
                Settler.maleCount += 1
            else:
                self.sex = "Female"
                Settler.iqlistfemale=Settler.iqlistfemale+[self.iq]
                Settler.surnameFemale += [self.name]
                Settler.femaleCount += 1


稍后它将包含更多属性,这只是一个开始。

我还做了一个循环,要求您创建一定数量的男性,然后创建一定数量的女性。

循环事物看起来像这样:

x=int(input("Number of male Settlers to generate? (1-20) "))
if x >0 and x <21:
    tellergenerator=0
    while tellergenerator<x:
        Settler("M")
        tellergenerator=tellergenerator+1

else:
    print("Wrong input!")



x=int(input("Number of female Settlers to generate? (1-20) "))
if x >0 and x <21:
    tellergenerator=0
    while tellergenerator<x:
        Settler("F")
        tellergenerator=tellergenerator+1

else:
    print("Wrong input!")


另外,我做了一个def事情,它使您可以调用有关对象属性的信息:

def displaySettler(self):
        print("Name:", self.name, "Sex:", self.sex, "IQ:", self.iq)


现在,对于以下问题:


主要问题:我的循环事物工作正常,这意味着它创建了我要创建的正确性别的对象数。据我所知,我的问题是它创建的对象没有名称。这意味着我无法执行displaySettler()调用,因为它要求我执行nameofobject.displaySettler()。如何使用某种循环函数创建一堆对象,使这些对象具有名称。


我找到了一种将数字组合为字符串的方法,这可能使我可以将创建对象名称(例如沉降器1,沉降器2,沉降器3)的系统放入循环中,但是我这样做的方法是

x=settler
y=(some counter)
z=x+str(y)


那是我可以使用的东西吗?我知道用名称创建对象的唯一方法是编写类似

settler1=Settler("F")


要么

w=Settler("F")


是否可以使用变量z的内容命名?


我还想问以下问题:从您的课堂上可能会看到,我正在做一堆清单。我想我必须为每个性别的每个属性列出一个列表,其中包含所有对象的特定属性。我希望这些列表能够计算每个属性的总体平均值,诸如此类。


是否可以直接从对象中获取这些值,然后直接遍历所有对象并从中计算平均值?

或者换种说法:如果我有200个对象,是否有某种方法可以将所有对象的智商相加?

感谢您的阅读(如果有人知道了这一点)。所有建设性的反馈将不胜感激。

最佳答案

您需要让人员生成器在列表或字典等数据结构中记录生成的人员,然后从该创建的结构访问这些人员。代替您的while循环,请尝试:

people = []
for i in range(x):
    people.append(Settler('M')) # or 'F', for the other loop


然后,您可以使用:

people[n].displaySettler() # where n is any integer from 0 to x-1

关于python - 命名自动生成的对象,python,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13258415/

10-14 18:11
查看更多