【问题标题】:I keep getting answer is 2我不断得到答案是 2
【发布时间】:2018-05-31 04:18:40
【问题描述】:

除了 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。我们明天有考试,但我们的老师没有给我们任何答案....

【问题讨论】:

  • 代码太多,我们无法为您调试,尤其是当您甚至没有描述代码时。有没有调试过?
  • 尽管你不应该在merge 中使用append,但我会采取措施。您似乎需要连接列表,而不是将一个附加到另一个。
  • 不,我们没有,因为他们没想到会在考试中出现。我们唯一需要做的就是填写def merge(self, a_star_cluster)。我们需要的是合并 sc1 和 sc2。
  • 我不确定那条评论的反应是什么。如果你说你没有调试是因为你不必为了考试而调试,那是错误的思考方式。无论如何,您都需要调试代码。这是达到目的的手段。
  • 感谢您的回答。问题是我们不要调试,因为代码已经给出正确的(我希望)。所以我们只需要输入一些小代码来定义合并

标签: python class


【解决方案1】:

您在正确的轨道上,但是,请尝试打印 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

这将复制恒星并记住星团现在有多少行星,但不会复制其他星团本身。

【讨论】:

    猜你喜欢
    • 2012-08-08
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 2021-05-27
    相关资源
    最近更新 更多