我制作了这个节目。我现在要做的是在类Star_cluster
中创建一个新的方法,它将计数并返回所有行星有危险的星团。在这种情况下,处于危险中的行星是一颗具有短星寿命的行星。当一颗恒星的总质量超过9.5太阳质量时,它的寿命很短。
class Planet:
def __init__ (self, a_str1, a_str2, a_float):
self.name = a_str1
self.type = a_str2
self.orbital_period = a_float
class Star:
def __init__ (self, a_float, a_planet_list):
self.total_mass = a_float # in solar masses
self.orbiting_planets = a_planet_list # list of Planet-objects
class Star_cluster:
def __init__ (self):
self.star_list = [] # list of Star-objects
def add(self, Star):
self.star_list.append(Star)
我的问题是我不知道如何将不同方法中的值组合起来制作一个for循环。
例如,我试图做这样的事情:
class Star_cluster:
def planets_in_danger (self):
for i in self.orbiting_planets:
if i.total_mass > 9.5:
k = self.orbiting_planets.count(i)
return k
但我不能让这个工作。我想了解我应该如何处理这个问题,因为我知道该怎么做,但不能完全确定如何以最好的方式去做。
特别是是否使用self
以及涉及多个方法且只有一个for循环的事实让我感到困惑。有人能指出我正确的方向吗?
答案 0 :(得分:2)
遍历给定群集中的所有星星。如果恒星的总质量超过9.5,则将属于该恒星的行星数量计算为濒危行星的数量。
def planets_in_danger(self):
in_danger = 0
for star in self.star_list:
if star.total_mass > 9.5:
in_danger += len(star.orbiting_planets)
return in_danger
或更短:
def planets_in_danger(self):
return sum(len(star.orbiting_planets) for star in self.star_list if star.total_mass > 9.5)
编辑:返回濒危行星和行星的数量:
def planets_in_danger(self):
in_danger = []
for star in self.star_list:
if star.total_mass > 9.5:
in_danger.extend(star.orbiting_planets)
return (len(in_danger), in_danger)
答案 1 :(得分:0)
class Planet:
def __init__ (self, a_str1, a_str2, a_float):
self.name = a_str1
self.type = a_str2
self.orbital_period = a_float
class Star:
def __init__ (self, a_float, a_planet_list):
self.total_mass = a_float # in solar masses
self.orbiting_planets = a_planet_list # list of Planet-objects
class Star_cluster:
def __init__ (self):
self.star_list = [] # list of Star-objects
def add(self, Star):
self.star_list.append(Star)
def planets_in_danger(self, stars_list):
result = []
solar_mass = 1.989 * (10**30)
for i in stars_list:
if i.total_mass > 9.5 * solar_mass:
result.append(i)
return result