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

时间:2017-12-03 12:39:26

标签: 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循环的事实让我感到困惑。有人能指出我正确的方向吗?

2 个答案:

答案 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)

在Star_Cluster

中调用planets_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