You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python类内列表元素正确初始化方法 修复行星体重计算错误

问题原因

你的代码存在两个核心问题:

  • 初始化self.planets时先存入了行星名称字符串,后续又按索引把每个位置的元素直接覆写成重力系数浮点数,行星名称数据被完全覆盖,循环读取时自然只能拿到数值。
  • calculate_spaceweight方法内部仅做打印操作,没有设置返回值,Python中无显式返回值的方法会默认返回None,主逻辑中额外用print()包裹方法调用,就会在末尾多输出一行None。
规范初始化实现

这个场景下不要用同一个列表先后存两类完全不同的数据,推荐直接在初始化时将行星名称和对应的重力系数绑定存储,从根源避免数据覆写、索引错位的问题。

推荐方案:键值对映射存储

用字典存储名称和重力系数的对应关系,逻辑最清晰,也不需要依赖索引匹配:

class Planet:
    def __init__(self):
        # 初始化时直接完成映射定义,无冗余覆写操作
        self.planet_gravity = {
            'Mercury': 0.38,
            'Venus': 0.91,
            'Mars': 0.38,
            'Jupiter': 2.34,
            'Saturn': 0.93,
            'Uranus': 0.92,
            'Neptune': 1.12,
            'Pluto': 0.62
        }

    def calculate_spaceweight(self, weight):
        # 直接遍历键值对,无需通过索引访问元素
        for planet_name, g_ratio in self.planet_gravity.items():
            print(f"your weight on {planet_name} is {weight * g_ratio}")

if __name__ == '__main__':
    weight = float(input("what is your Earthly weight: "))
    obj = Planet()
    # 方法本身已实现打印逻辑,无需额外套print
    obj.calculate_spaceweight(weight)

平行列表方案

如果习惯用列表存储,初始化时直接定义两个独立列表分别存名称和重力系数即可,不要覆写同一个列表的元素,遍历的时候用zip()并行遍历两个列表,不需要手动管理索引:

class Planet:
    def __init__(self):
        # 两个列表独立初始化,顺序一一对应
        self.planet_names = ['Mercury', 'Venus', 'Mars',
                        'Jupiter', 'Saturn','Uranus',
                        'Neptune', 'Pluto']
        self.gravity_ratios = [0.38, 0.91, 0.38, 2.34, 0.93, 0.92, 1.12, 0.62]

    def calculate_spaceweight(self, weight):
        for planet_name, g_ratio in zip(self.planet_names, self.gravity_ratios):
            print(f"your weight on {planet_name} is {weight * g_ratio}")
实现注意事项
  • 禁止用同一个列表先后存储不同语义的数据,避免元素覆写导致的数据丢失
  • 遍历多组关联的序列数据时,优先用zip()、字典.items()这类直接获取配对元素的方式,减少手动操作索引带来的bug
  • 仅承担输出、逻辑处理功能,无返回值的方法,调用时不要额外包裹print(),避免输出无意义的默认返回值None

内容的提问来源于stack exchange,提问作者galapagos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 13:33:24