diff --git a/module5_BMI_calculator.py b/module5_BMI_calculator.py new file mode 100644 index 0000000000000000000000000000000000000000..655bd77793cc481e4322d898e0128d78a8fa147e --- /dev/null +++ b/module5_BMI_calculator.py @@ -0,0 +1,77 @@ +import numpy as np +import matplotlib.pyplot as plt + + +def input_main_menu(): + print('') + print('What would you like to do?') + print('Type 1, 2, or 3 followed by enter:') + print('1. Compute and display BMI from weight and height.') + print('2. Compute and display a normal BMI range from height.') + print('3. Quit') + i = 0 + while i==0: + s = input('Choice: ') + try: + i = int(s) + except: + pass + if not i in [1,2,3]: + print('You typed ' + s) + print('You should type 1, 2 or 3 followed by enter.') + i = 0 + return(i) + + +def input_measure(measure_type, units, m_min, m_max): + print('') + m = 0 + while m==0: + s = input('Type ' + measure_type + ' followed by enter: ') + try: + m = float(s) + except: + pass + if m<m_min or m>m_max: + print('You typed ' + s) + print('Type a valid ' + measure_type + ' in ' + units +'.') + m = 0 + return(m) + + +def make_plot(height, weight=None): + h = np.linspace(1.3, 2.2) + plt.plot(h, 30*h**2, 'r') + plt.plot(h, 25*h**2, 'm') + plt.plot(h, 18.5*h**2, 'g') + if weight is None: + wmin = 18.5*height**2 + wmax = 25*height**2 + plt.plot([height, height], [wmin, wmax], 'k') + d = f'Normal range [{wmin:.2f} {wmax:.2f}]' + else: + plt.plot(height, weight, 'ko') + d = f'BMI {weight/(height**2):.2f}' + plt.legend(['Obese to overweight', 'Overweight to normal', + 'Normal to underweight', d]) + plt.xlabel('Height') + plt.ylabel('Weight') + plt.title('BMI plot') + plt.show() + + +# main program +print('*************************') +print('Welcome to BMI calculator') +choice = 0 +while choice<3: + choice = input_main_menu() + if choice==1: + h = input_measure('height', 'meters', 1, 2.5) + w = input_measure('weight', 'kilograms', 40, 300) + make_plot(h, w) + elif choice==2: + h = input_measure('height', 'meters', 1, 2.5) + make_plot(h) +print('Bye!') + \ No newline at end of file