命名自动生成的对象,python

2024-10-01 22:32:57 发布

您现在位置:Python中文网/ 问答频道 /正文

斜体文本可以跳过。在

首先:如果我要求的是基础知识,也很容易找到答案,或者任何类似的东西都可能让我的帖子让任何人讨厌,请原谅我。我对编程还不熟悉,刚开始编程只是为了找个借口不为考试而读书。 我正在尝试制作一个程序,可以模拟从一个人类部落进化到……嗯,一个更高级的人类部落。我的目标是让未来的建筑和建筑变得更简单。从零开始,现在对编程一无所知,我知道这是一个我可能永远无法完成的任务。希望我能在路上学到一些东西。 因为我的知识是如此有限,我的问题将是笨拙的和糟糕的表达。对不起,谢谢你的阅读。

当前的问题: 我创建了一个类,它生成的对象应该代表人。在

现在的班级是这样的:

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

以后它会包含更多的属性,这只是一个开始。在

我还做了一个循环,要求你创造一个雄性,然后再创造一个雌性。在

循环是这样的:

^{pr2}$

另外,我还做了一个def工具,允许您调用有关对象属性的信息:

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

现在,对于以下问题:

  1. 主要问题:我的循环功能很好,这意味着它创建了我想要创建的正确性别的对象数量。我的问题是,据我所知,它创建的对象没有名称。这意味着我不能执行displaySettler()调用,因为它需要我去做名称Object.displaySettler(). 如何使用某种循环函数创建一组对象,使这些对象具有名称。在

我找到了一种将数字组合成字符串的方法,它可以让我将一个创建对象名的系统放入循环中,该系统可以创建像settler1、settler2、settler3之类的对象名,但是我这样做的方法是

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

这是我能用的东西吗?我知道创建带有名称的对象的唯一方法是编写类似

settler1=Settler("F")

或者

w=Settler("F")

可以用变量z的内容来命名吗?在

  1. 我还想问以下问题:正如你在我的课上看到的,我正在做一系列的列表。我想我必须为每个性别的每个属性列出一个列表,包括所有对象的特定属性。我希望这些列表能够计算出每个属性的总体平均值,诸如此类。在

有没有可能直接从对象中得到这些值,然后直接遍历所有对象,然后从中计算出平均值?在

或者换一种说法:如果我有200个物体,有没有办法把所有物体的智商加在一起?在

谢谢你的阅读(如果有人能做到这一点)。我们将非常感谢所有建设性的反馈。在


Tags: or对象方法nameself名称属性def
3条回答

两件事:

1)最好有两个不同的类,男性和女性,它们都扩展了基类Settler。这样就避免了大部分if sex = M then this else that的东西

示例:

class Settler:
    def __init__(self, name):
        self.name = name
        self.iq = round(random.normalvariate(100,10))

class Male(Settler):
    def __str__(self):
        return '{0.name}, male, iq {0.iq}'.format(self)

class Female(Settler):
    def __str__(self):
        return '{0.name}, female, iq {0.iq}'.format(self)

注意这两个类如何使用__str__以字符串形式“表示”自己。在

2)将与对象列表有关的所有内容保持在对象定义之外。好东西不知道外面发生了什么。例如,以下是如何生成人员列表:

^{pr2}$

[stuff for _ in range(N)]基本意思是“做N次事情”。在

最后,让我们把它们放在一起,打印出一份人员名单:

for person in people:
    print(person)

输出如下:

Doe, male, iq 114.0
Doe, male, iq 110.0
Polly-Parrot, male, iq 89.0
Smith, male, iq 96.0
Polly-Parrot, male, iq 83.0
Mueller, female, iq 118.0
Mueller, female, iq 90.0
Smith, female, iq 90.0
Smith, female, iq 103.0
Mueller, female, iq 89.0
Smith, female, iq 87.0

如果您有更多问题,请告诉我们。在

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

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

然后您可以使用:

^{pr2}$

为了回答您的第二个问题,假设您有一个名为people的定居者列表(这是一个列表理解)。。。在

iqs = [person.iq for person in people]
total_iq = sum(iqs)

相关问题 更多 >

    热门问题