SoRobby
SoRobby

Reputation: 273

What is a more efficeint way to write this?

I'm new to python and am wondering what is a more effective/proper way to write this? The user will input their a a "orbiting_body" type and if they match it will pull the correct variables.

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

Upvotes: 1

Views: 54

Answers (4)

diegoiva
diegoiva

Reputation: 484

Try using a dictionary, heres is an example code:

Here i'm entering values to my dictionary

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

You can also insert values to the dictionary as follows:

my_dict['Chairos'] = 6.2

And you can access them by specifying the desire key:

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

Upvotes: 1

lakshayg
lakshayg

Reputation: 2173

Here's another approach very similar to @tdelaney's

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]

Upvotes: 0

tdelaney
tdelaney

Reputation: 77347

Put it in a dict

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

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

Upvotes: 5

Alex Foglia
Alex Foglia

Reputation: 530

Not remembering python syntax very well because I don't use it since years, but consider the logic: If you don't want to use polymorphism, you can create a dictionary map(key,value). For example: map[Europa]=(1560.8,3203.52) map[default]=(0.0,0.0)

and when user insert orbiting_body you assign variables by doing:

(primary_body_radius,gravitational_paramter)=map[orbiting_body]

Upvotes: 0

Related Questions