5626897ebe391e23d53fc53b7d8b2fc238be8bf7
2 # -*- coding: utf-8 -*-
5 # Munter Time Calculation
7 # Rudimentary program written by ALV to implement the Munter time calculation
12 class InvalidUnitsException(Exception):
16 'uphill': { 'rate': 4, 'direction': '↑' },
17 'flat': { 'rate': 6, 'direction': '→' }, # or downhill on foot
18 'downhill': { 'rate': 10, 'direction': '↓' },
19 'bushwhacking': { 'rate': 2, 'direction': '↹' },
22 unit_choices
= ['metric', 'imperial']
23 travel_mode_choices
= rates
.keys()
25 def munter(distance
, elevation
, rate
, units
):
28 if units
not in unit_choices
:
29 raise InvalidUnitsException
33 if 'imperial' == units
:
35 distance
= (distance
* 1.609) # mi to km
36 elevation
= (elevation
* .305) # ft to m
38 unit_count
= distance
+ (elevation
/ 100.0)
40 retval
['time'] = (distance
+ (elevation
/ 100.0)) / rates
[rate
]['rate']
41 retval
['unit_count'] = unit_count
42 retval
['direction'] = rates
[rate
]['direction']
43 retval
['pace'] = rates
[rate
]['rate']
48 parser
= argparse
.ArgumentParser(description
='Munter Time Calculation')
50 parser
.add_argument('--distance', '-d', type=float,
52 help='Distance (in km, by default)')
54 parser
.add_argument('--elevation', '-e', type=float,
56 help='Elevation change (in m, by default)')
58 parser
.add_argument('--travel-mode', '-t', type=str,
60 choices
=travel_mode_choices
, required
=False,
61 help='Travel mode (flat, by default)')
63 parser
.add_argument('--units', '-u', type=str,
67 help='Units of input values')
69 opts
= parser
.parse_args()
71 distance
= opts
.distance
72 elevation
= opts
.elevation
74 travel_mode
= opts
.travel_mode
76 time_calc
= munter(distance
, elevation
, travel_mode
, units
=units
)
78 hours
= int(time_calc
['time'])
79 minutes
= int((time_calc
['time'] - hours
) * 60)
81 print("\n\t╒═══════════════════════════════╕")
82 print("\t╎▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒╎╮")
83 print("\t╎▒{:^29}▒╎│".format(''))
84 print("\t╎▒{pace_readable:^31}▒╎│".format(
85 pace_readable
="{units} {direction} @ {pace}".format(
86 units
=round(time_calc
['unit_count']),
87 direction
=time_calc
['direction'],
88 pace
=time_calc
['pace'])))
89 print("\t╎▒{human_time:^29}▒╎│".format(
90 human_time
="{hours} hours {minutes} minutes".format(
93 print("\t╎▒{:^29}▒╎│".format(''))
94 print("\t╎▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒╎│")
95 print("\t╘═══════════════════════════════╛│")
96 print("\t └───────────────────────────────┘\n")
98 if __name__
== "__main__":