除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.我们明天参加考试,但我们的老师没有给我们任何答案....
答案 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
这将复制星星,并记住群集现在有多少个行星,但不复制其他星群本身。