b7a7f725b44882531f1245df49ca00304a071dfe
3 # Munter Time Calculation
5 # Rudimentary program written by ALV to implement the Munter time calculation
10 class InvalidUnitsException(Exception):
15 'flat': 6, # or downhill on foot
20 unit_choices
= ['metric', 'imperial']
21 travel_mode_choices
= rates
.keys()
23 def munter(distance
, elevation
, rate
='flat', units
='metric'):
24 if units
not in unit_choices
:
25 raise InvalidUnitsException
27 if 'imperial' == units
:
29 distance
= (distance
* 1.609) # mi to km
30 elevation
= (elevation
* .305) # ft to m
32 time
= (distance
+ (elevation
/ 100.0)) / rates
[rate
]
37 parser
= argparse
.ArgumentParser(description
='Munter Time Calculation')
39 parser
.add_argument('--distance', '-d', type=float, required
=True,
40 help='Distance (in km, by default)')
41 parser
.add_argument('--elevation', '-e', type=float, required
=True,
42 help='Elevation change (in m, by default)')
43 parser
.add_argument('--travel-mode', '-t', type=str,
44 default
='uphill', choices
=travel_mode_choices
, required
=False,
45 help='Travel mode (flat, by default)')
46 parser
.add_argument('--units', '-u', type=str, default
='metric',
49 help='Units of input values')
50 opts
= parser
.parse_args()
52 distance
= opts
.distance
53 elevation
= opts
.elevation
55 travel_mode
= opts
.travel_mode
57 print("Estimated Time (in hours) = %8.2f"
58 % munter(distance
, elevation
, travel_mode
, units
=units
))
60 if __name__
== "__main__":