写这个更有效的方法是什么?

What is a more efficeint way to write this?

我是 python 的新手,想知道什么是更 effective/proper 的写法?用户将输入他们的 a "orbiting_body" 类型,如果它们匹配,它将提取正确的变量。

if orbiting_body == "Ariel":    
    primary_body_radius = 578.9
    gravitational_parameter = 90.099
elif orbiting_body == "Callisto":   
    primary_body_radius = 2410.3    
    gravitational_parameter = 7181.224
elif orbiting_body == "Ceres":  
    primary_body_radius = 481.5 
    gravitational_parameter = 62.66886
elif orbiting_body == "Charon": 
    primary_body_radius = 603.5 
    gravitational_parameter = 101.4448
elif orbiting_body == "Deimos": 
    primary_body_radius = 6.2   
    gravitational_parameter = 0.000098521588
elif orbiting_body == "Dione":  
    primary_body_radius = 561.4 
    gravitational_parameter = 73.14704
elif orbiting_body == "Earth":  
    primary_body_radius = 6371  
    gravitational_parameter = 398678.064
elif orbiting_body == "Eris":   
    primary_body_radius = 1163  
    gravitational_parameter = 1114.558
elif orbiting_body == "Europa": 
    primary_body_radius = 1560.8    
    gravitational_parameter = 3203.52
else:   
    primary_body_radius = 0.0   
    gravitational_parameter = 0.0

放在dict

db = {
  "Ariel": (578.9, 90.099),
  ... and etc
}

primary_body_radius, gravitational_parameter = db.get(orbiting_body, (0.0, 0.0))

不太记得 python 语法,因为我已经很多年没有使用它了,但考虑一下逻辑: 如果你不想使用多态性,你可以创建一个字典 map(key,value)。例如: map[Europa]=(1560.8,3203.52) map[default]=(0.0,0.0)

当用户插入 orbiting_body 时,您可以通过以下方式分配变量:

(primary_body_radius,gravitational_paramter)=map[orbiting_body]

这是另一种与@tdelaney 的非常相似的方法

from collections import defaultdict

orbiting_body = ...

primary_body_radius, gravitational_parameter = defaultdict(lambda: (0,0), {
    'Ariel': (578.9, 90.099),
    'Callisto': (2410.3, 7181.224),
    # similarly for others
})[orbiting_body]

尝试使用 dictionary,这是一个示例代码:

这里我正在向我的字典输入值

my_dict = {'Ariel':578.9, 'Callisto': 2410.3, 'Ceres':481.5}

您还可以按如下方式向字典中插入值:

my_dict['Chairos'] = 6.2

并且您可以通过指定所需密钥来访问它们:

primary_body_radius = my_dict['Ariel']
>> print(primary_body_radius)
>> 578.9