我一直得到答案是2

时间:2017-12-17 18:07:42

标签: python class

除Star_cluster类

中的def merge()外,所有代码都给出
class Planet:
    def __init__(self, a_str, a_boolean, an_int):
        self.type = a_str
        self.in_habitable_zone = a_boolean
        self.number_of_moons = an_int


class Star:

    def __init__(self, a_str, a_float, a_planet_list):
        self.name = a_str
        self.surface_temperature = a_float  # in Kelvin
        self.orbiting_planets = a_planet_list  # list of Planet-objects


class Star_cluster():

    def __init__(self):
        self.star_list = []  # list of Star-objects
        self.total_number_of_planets = 0

    def add(self, star):
        self.star_list.append(star)
        self.total_number_of_planets += len(star.orbiting_planets)

    def merge(self, a_star_cluster):
        self.star_list.append(a_star_cluster)


planet1 = Planet('rocky', True, 1)

planet2 = Planet('gas giant', False, 9)
planet3 = Planet('rocky', True, 3)

star1 = Star('Alpha Centauri', 9001.0, [])
star2 = Star('Betelgeuze', 3000.0, [planet1])
star3 = Star('Tau Ceti', 7000.0, [planet2, planet3])

sc1 = Star_cluster()
sc1.add(star1)

sc2 = Star_cluster()
sc2.add(star2)
sc2.add(star3)

sc1.merge(sc2)

print "should be 3: %d" % (len(sc1.star_list))

我们需要在这段代码中加入唯一的东西是def合并,但我一直得到2而不是3.我们明天参加考试,但我们的老师没有给我们任何答案....

1 个答案:

答案 0 :(得分:0)

您走在正确的轨道上,但是,请尝试打印sc1.star_list本身。你应该看到:

[<__main__.Star instance at 0x10281c680>, <__main__.Star_cluster instance at 0x10281c7a0>]

请注意,第二项是星团。这是因为在你的Star_Cluster.merge()中,你追加的是另一个星团本身,而不是它的星星。相反,使用:

def merge(self, a_star_cluster): self.star_list.append(a_star_cluster.star_list) self.total_number_of_planets += a_star_cluster.total_number_of_planets

这将复制星星,并记住群集现在有多少个行星,但不复制其他星群本身。