Note that there are some explanatory texts on larger screens.

plurals
  1. POsimplifying data structures and condition statements in python code
    text
    copied!<p>I was wondering if there are any ways to simplify the following piece of Code. As you can see, there are numerous dicts being used as well as condition statements to weed out bad input data. Note that the trip rate values are not all inputed yet, the dicts are just copied and pasted for now</p> <p><strong>EDIT</strong></p> <p>In any of the rates, (x,y):z . x and y are correct, the z values are not as they're just copy/pasted</p> <p>this code works in case you want to copy, paste, and test it</p> <pre><code>import math # step 1.4 return trip rates def trip_rates( population_stratification, analysis_type, low_income, medium_income, high_income ): ''' this function returns the proper trip rate tuple to be used based on input data ADPT = Average Daily Person Trips per Household pph = person per household veh_hh = vehicles per household (param_1, param_2): ADPT ''' li = low_income mi = medium_income hi = high_income # table 5 - if analysis_type == 1: if population_stratification == 1: rates = {( li, 1 ):3.6, ( li, 2 ):6.5, ( li, 3 ):9.1, ( li, 4 ):11.5, ( li, 5 ): 13.8, ( mi, 1 ):3.9, ( mi, 2 ):7.3, ( mi, 3 ):10.0, ( mi, 4 ):13.1, ( mi, 5 ): 15.9, ( hi, 1 ):4.5, ( mi, 2 ):9.2, ( mi, 3 ):12.2, ( mi, 4 ):14.8, ( mi, 5 ): 18.2} return rates if population_stratification == 2: rates = { ( li, 1 ):3.1, ( li, 2 ):6.3, ( li, 3 ):9.4, ( li, 4 ):12.5, ( li, 5 ): 14.7, ( mi, 1 ):4.8, ( mi, 2 ):7.2, ( mi, 3 ):10.1, ( mi, 4 ):13.3, ( mi, 5 ): 15.5, ( hi, 1 ):4.9, ( mi, 2 ):7.7, ( mi, 3 ):12.5, ( mi, 4 ):13.8, ( mi, 5 ): 16.7 } return rates if population_stratification == 3: #TODO: input actual rate rates = { ( li, 1 ):3.6, ( li, 2 ):6.5, ( li, 3 ):9.1, ( li, 4 ):11.5, ( li, 5 ): 13.8, ( mi, 1 ):3.9, ( mi, 2 ):7.3, ( mi, 3 ):10.0, ( mi, 4 ):13.1, ( mi, 5 ): 15.9, ( hi, 1 ):4.5, ( mi, 2 ):9.2, ( mi, 3 ):12.2, ( mi, 4 ):14.8, ( mi, 5 ): 18.2 } return rates if population_stratification == 4: #TODO: input actual rate rates = { ( li, 1 ):3.1, ( li, 2 ):6.3, ( li, 3 ):9.4, ( li, 4 ):12.5, ( li, 5 ): 14.7, ( mi, 1 ):4.8, ( mi, 2 ):7.2, ( mi, 3 ):10.1, ( mi, 4 ):13.3, ( mi, 5 ): 15.5, ( hi, 1 ):4.9, ( mi, 2 ):7.7, ( mi, 3 ):12.5, ( mi, 4 ):13.8, ( mi, 5 ): 16.7 } return rates #table 6 elif analysis_type == 2: if population_stratification == 1: #TODO: Change rates rates = { ( 0, 1 ):3.6, ( 0, 2 ):6.5, ( 0, 3 ):9.1, ( 0, 4 ):11.5, ( 0, 5 ): 13.8, ( 1, 1 ):3.9, ( 1, 2 ):7.3, ( 1, 3 ):10.0, ( 1, 4 ):13.1, ( 1, 5 ): 15.9, ( 2, 1 ):4.5, ( 2, 2 ):9.2, ( 2, 3 ):12.2, ( 2, 4 ):14.8, ( 2, 5 ): 18.2, ( 3, 1 ):4.5, ( 3, 2 ):9.2, ( 3, 3 ):12.2, ( 3, 4 ):14.8, ( 3, 5 ): 18.2 } return rates if population_stratification == 2: #TODO: Change rates rates = { ( 0, 1 ):3.6, ( 0, 2 ):6.5, ( 0, 3 ):9.1, ( 0, 4 ):11.5, ( 0, 5 ): 13.8, ( 1, 1 ):3.9, ( 1, 2 ):7.3, ( 1, 3 ):10.0, ( 1, 4 ):13.1, ( 1, 5 ): 15.9, ( 2, 1 ):4.5, ( 2, 2 ):9.2, ( 2, 3 ):12.2, ( 2, 4 ):14.8, ( 2, 5 ): 18.2, ( 3, 1 ):4.5, ( 3, 2 ):9.2, ( 3, 3 ):12.2, ( 3, 4 ):14.8, ( 3, 5 ): 18.2 } return rates if population_stratification == 3: #TODO: Change rates rates = { ( 0, 1 ):3.6, ( 0, 2 ):6.5, ( 0, 3 ):9.1, ( 0, 4 ):11.5, ( 0, 5 ): 13.8, ( 1, 1 ):3.9, ( 1, 2 ):7.3, ( 1, 3 ):10.0, ( 1, 4 ):13.1, ( 1, 5 ): 15.9, ( 2, 1 ):4.5, ( 2, 2 ):9.2, ( 2, 3 ):12.2, ( 2, 4 ):14.8, ( 2, 5 ): 18.2, ( 3, 1 ):4.5, ( 3, 2 ):9.2, ( 3, 3 ):12.2, ( 3, 4 ):14.8, ( 3, 5 ): 18.2 } return rates if population_stratification == 4: #TODO: Change rates rates = { ( 0, 1 ):3.6, ( 0, 2 ):6.5, ( 0, 3 ):9.1, ( 0, 4 ):11.5, ( 0, 5 ): 13.8, ( 1, 1 ):3.9, ( 1, 2 ):7.3, ( 1, 3 ):10.0, ( 1, 4 ):13.1, ( 1, 5 ): 15.9, ( 2, 1 ):4.5, ( 2, 2 ):9.2, ( 2, 3 ):12.2, ( 2, 4 ):14.8, ( 2, 5 ): 18.2, ( 3, 1 ):4.5, ( 3, 2 ):9.2, ( 3, 3 ):12.2, ( 3, 4 ):14.8, ( 3, 5 ): 18.2 } return rates # table 7 elif analysis_type == 3: if population_stratification == 1: #TODO: input actual rate rates = { ( li, 0 ):3.6, ( li, 1 ):6.5, ( li, 2 ):9.1, ( li, 3 ):11.5, ( mi, 0 ):3.9, ( mi, 1 ):7.3, ( mi, 2 ):10.0, ( mi, 3 ):13.1, ( hi, 0 ):4.5, ( mi, 1 ):9.2, ( mi, 2 ):12.2, ( mi, 3 ):14.8 } return rates if population_stratification == 2: #TODO: input actual rate rates = { ( li, 0 ):3.6, ( li, 1 ):6.5, ( li, 2 ):9.1, ( li, 3 ):11.5, ( mi, 0 ):3.9, ( mi, 1 ):7.3, ( mi, 2 ):10.0, ( mi, 3 ):13.1, ( hi, 0 ):4.5, ( mi, 1 ):9.2, ( mi, 2 ):12.2, ( mi, 3 ):14.8 } return rates if population_stratification == 3: #TODO: input actual rate rates = { ( li, 0 ):3.6, ( li, 1 ):6.5, ( li, 2 ):9.1, ( li, 3 ):11.5, ( mi, 0 ):3.9, ( mi, 1 ):7.3, ( mi, 2 ):10.0, ( mi, 3 ):13.1, ( hi, 0 ):4.5, ( mi, 1 ):9.2, ( mi, 2 ):12.2, ( mi, 3 ):14.8 } return rates if population_stratification == 4: #TODO: input actual rate rates = { ( li, 0 ):3.6, ( li, 1 ):6.5, ( li, 2 ):9.1, ( li, 3 ):11.5, ( mi, 0 ):3.9, ( mi, 1 ):7.3, ( mi, 2 ):10.0, ( mi, 3 ):13.1, ( hi, 0 ):4.5, ( mi, 1 ):9.2, ( mi, 2 ):12.2, ( mi, 3 ):14.8 } return rates def interpolate( population_stratification, analysis_type, low_income, medium_income, high_income, x, y ): #get rates dict rates = trip_rates( population_stratification, analysis_type, low_income, medium_income, high_income ) # dealing with x parameters #when using income levels, x_1 and x_2 are li, mi, or hi if analysis_type == 1 or analysis_type == 2 or analsis_type == 4: if x &lt; high_income and x &gt;= medium_income: x_1 = medium_income x_2 = high_income elif x &lt; medium_income: x_1 = low_income x_2 = medium_income else: x_1 = high_income x_2 = high_income if analysis_type == 3: if x &gt;= 3: x_1 = 3 x_2 = 3 else: x_1 = int( math.floor( x ) ) x_2 = int( math.ceil( x ) ) # dealing with y parametrs #when using persons per household, max number y = 5 if analysis_type == 1 or analysis_type == 4: if y &gt;= 5: y_1 = 5 y_2 = 5 else: y_1 = int( math.floor( y ) ) y_2 = int( math.ceil( y ) ) elif analysis_type == 2 or analysis_type == 3: if y &gt;= 5: y_1 = 5 y_2 = 5 else: y_1 = int( math.floor( y ) ) y_2 = int( math.ceil( y ) ) # denominator z = ( ( x_2 - x_1 ) * ( y_2 - y_1 ) ) result = ( ( ( rates[( x_1, y_1 )] ) * ( ( x_2 - x ) * ( y_2 - y ) ) / ( z ) ) + ( ( rates[( x_2, y_1 )] ) * ( ( x - x_1 ) * ( y_2 - y ) ) / ( z ) ) + ( ( rates[( x_1, y_2 )] ) * ( ( x_2 - x ) * ( y - y_1 ) ) / ( z ) ) + ( ( rates[( x_2, y_2 )] ) * ( ( x - x_1 ) * ( y - y_1 ) ) / ( z ) ) ) return result #test low_income = 20000 #this is calculated using exchange rates medium_income = 40000 # this is calculated using exchange rates high_income = 60000 # this is calculated using exchange rates population_stratification = 1 #inputed by user analysis_type = 1 #inputed by user x = 35234.34 #test income y = 3.5 # test pph print interpolate( population_stratification, analysis_type, low_income, medium_income, high_income, x, y ) </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload