如何用不同方法中的值迭代for循环?

2024-06-16 17:06:55 发布

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

我做了这个节目。我现在想做的是,在类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循环的事实,让我很困惑。有人能给我指出正确的方向吗?你知道吗


Tags: 方法inselfforinitdef行星float
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)

调用星团中危险的行星的函数

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

相关问题 更多 >