-import argparse
-
-class InvalidUnitsException(Exception):
- pass
-
-rates = {
- 'uphill': 4,
- 'flat': 6, # or downhill on foot
- 'downhill': 10,
- 'bushwhacking': 2
-}
-
-unit_choices = ['metric', 'imperial']
-travel_mode_choices = rates.keys()
-
-def munter(distance, elevation, rate='flat', units='metric'):
- if units not in unit_choices:
- raise InvalidUnitsException
-
- if 'imperial' == units:
- # convert to metric
- distance = (distance * 1.609) # mi to km
- elevation = (elevation * .305) # ft to m
-
- time = (distance + (elevation / 100.0)) / rates[rate]
-
- return time
-
-def main():
- parser = argparse.ArgumentParser(description='Munter Time Calculation')
-
- parser.add_argument('--distance', '-d', type=float, required=True,
- help='Distance (in km, by default)')
- parser.add_argument('--elevation', '-e', type=float, required=True,
- help='Elevation change (in m, by default)')
- parser.add_argument('--travel-mode', '-t', type=str,
- default='uphill', choices=travel_mode_choices, required=False,
- help='Travel mode (flat, by default)')
- parser.add_argument('--units', '-u', type=str, default='metric',
- required=False,
- choices=unit_choices,
- help='Units of input values')
- opts = parser.parse_args()
-
- distance = opts.distance
- elevation = opts.elevation
- units = opts.units
- travel_mode = opts.travel_mode
-
- print("Estimated Time (in hours) = %8.2f"
- % munter(distance, elevation, travel_mode, units=units))