写这个更有效的方法是什么?
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
我是 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