class Part:
def __init__(self, name, subsystem, mass):
self.name = name
self.subsystem = subsystem
self.mass = mass
def __repr__(self):
return f"{self.name} ({self.mass} kg)"
def __lt__(self, other):
return self.mass < other.mass
class Spacecraft:
def __init__(self, name):
self.name = name
self.parts = []
def add_part(self, part):
self.parts.append(part)
def total_mass(self):
return sum(part.mass for part in self.parts)
def mass_by_subsystem(self):
totals = {}
for part in self.parts:
totals[part.subsystem] = totals.get(part.subsystem, 0.0) + part.mass
return totals
def parts_heaviest_first(self):
return sorted(self.parts, reverse=True)
sc = Spacecraft("Orion")
sc.add_part(Part("proptank", "propulsion", 1200.0))
sc.add_part(Part("engine", "propulsion", 450.0))
sc.add_part(Part("heat shield", "structure", 1600.0))
sc.add_part(Part("avionics bay", "avionics", 220.0))
print(f"Total mass: {sc.total_mass()} kg")
print(sc.mass_by_subsystem())
print(sc.parts_heaviest_first())
Total mass: 3470.0 kg
{'propulsion': 1650.0, 'structure': 1600.0, 'avionics': 220.0}
[heat shield (1600.0 kg), proptank (1200.0 kg), engine (450.0 kg), avionics bay (220.0 kg)]