#!/usr/bin/python3 # =================================================================== # Drop a rock from an airplane and hit a target # =================================================================== import user_interface as ui from math import sqrt import sys grav = 32.0 # gravity - 32 ft/sec/sec # ------------------------------------------------------------------- # ---- prompt the user to enter a number # ------------------------------------------------------------------- def get_float(prompt): while(True): print() s = ui.get_user_input(prompt) if not s: # empty string print() sys.exit() tf,n = ui.is_float(s) if not tf: print() print(f'opps! bad data input ({s})') return n # ------------------------------------------------------------------- # ---- main # ------------------------------------------------------------------- while(True): ui.clear_screen() # ---- get air speed and wind speed airspeed = get_float('Enter air speed\n + right to left\n' + ' - left to right\nEnter speed (mph): ') windspeed = get_float('Enter wind speed\n + right to left\n' + ' - left to right\nEnter speed (mph): ') if abs(airspeed + windspeed) < 10.0: print() print(f'air speed ({airspeed}) must at least 10 mph\n' + f'greater than wind speed ({windspeed}) ' + '- start over') ui.pause() continue # ---- get altitude altitude = get_float('Enter altitude (feet): ') if altitude <= 0.0: print() print(f'altitude (altitude) must positive - start over') ui.pause() continue # ---- calculate print() print(f'Gravity (ft/sec/sec): {round(grav,2)}') print(f'Air speed (mph): {round(airspeed,2)}') print(f'Wind speed (mph): {round(windspeed,2)}') print(f'Altitude (feet): {round(altitude,2)}') droptime = sqrt(altitude/(0.5 * grav)) # sec print(f'drop time (sec): {round(droptime,2)}') groundspeed = abs(airspeed + windspeed) feetpersec = (groundspeed * 5280) / (60 * 60) # fps print(f'ground speed (mph): {round(groundspeed,2)}') print(f' (fps): {round(feetpersec,2)}') dropdistance = droptime * feetpersec # feet print() print(f'Drop the rock when {round(dropdistance,2)} feet from target') ui.pause()