solution_032.py

#!/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()