python中的类、对象和列表

2024-05-15 06:30:44 发布

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

所以我尝试创建一个程序,但我仍然有困难的类。这个程序(当然还没有完成)将打印一个随机数目的村庄。每个村庄(二等)将有一个随机数目的氏族(一等)。不管怎样,我的问题是乡村阶级。如何确保将面积和家庭规模添加到村级中?如何将计数器从氏族类插入乡村类?正如你所看到的,当我随机分配了一些部落的时候,这些地区和家庭的规模应该加在一起成为乡村阶级。我该怎么办?我的乡村班怎么了?你知道吗

class Clan:
 counter = 0

 def __init__(self):
    r = random.randrange(20, 101)
    self.area = r
    s = random.randrange(1, 6)
    self.familySize = s
    Clan.counter += 1
    self.counter = Clan.counter

 def getArea(self):
    return self.area

 def getFamilySize(self):
    return self.familySize


class Village:
 counter = 0

 def __init__(self):
    self.clan_list = []
    for i in range(random.randrange(3, 7)): 
        self.clan_list += [Clan()]
 def getclan_list(self):
    return self.clan_list
 def getArea(self):
    return self.area
 def getPopulation(self):
    pass

Tags: self程序目的returndefcounterarearandom
2条回答

由于面积和人口的值取决于clan_list中的氏族,因此每次需要时都应该计算这些值。另一种选择要复杂得多,必须控制如何在村庄中添加和删除部落以及如何改变部落的面积和家庭规模,并在村庄中反映这些变化。你知道吗

下面是一个如何计算村庄面积和人口的例子。第一个使用getter方法,第二个使用python风格的属性。你知道吗

import random

class Clan:
    counter = 0

    def __init__(self):
        r = random.randrange(20, 101)
        self.area = r
        s = random.randrange(1, 6)
        self.familySize = s
        Clan.counter += 1
        self.counter = Clan.counter

    # removed getters
    # Unless your getter or setter is doing something special,
    # just access the attribute directly.



class Village:

    def __init__(self):
        self.clan_list = []
        for i in range(random.randrange(3, 7)): 
            self.clan_list.append(Clan())

    # for a village, area is a computed value, so use a getter
    def getArea(self):
        total_area = 0
        for clan in self.clan_list:
            total_area += clan.area
        return total_area

    # the prefered alternative to getters (and setters) are properties
    # note that the function is named as if it was an attribute rather than function
    @property
    def population(self):
        # use sum and generator rather than a for loop
        return sum(clan.familySize for clan in self.clan_list)


# How to use a village instance
v = Village()
# get area
print("area:", v.getArea())
# get population
print("population:", v.population)
# note how population is accessed as if it was an attribute rather than called 
# like a function

那么,你想让村里的班级计算出村里有多少户人家?你知道吗

families = 0
for clan in self.clan_list
    families += clan.getFamilySize()

相关问题 更多 >

    热门问题