Search code examples
pythonfunctionparameterstuplesuser-input

How do I pass user input as a parameter in a function?


I'm trying to write a program that finds the distance in miles between two states. It should prompt a user to choose a state from a predetermined list. Then it should identify the state and its corresponding coordinates. Afterwards the program should enter the coordinates as parameters of the function "distance_calc" and generate the distance in miles. I'm having trouble finding a way to connect the user input, to the tuples I've created and those to the function "distance_calc". I'm new to python so any help is appreciated.

 #assign coordinates to location variable
washington_dc = (38.9072, 77.0369)
north_carolina = (35.7596, 79.0193)
florida = (27.6648, 81.5158)
hawaii = (19.8968, 155.5828)
california = (36.7783, 119.4179)
utah = (39.3210, 111.0937)
print('This Program Calculates The Distance Between States In Miles')

def distance_calc(p1, p2):
    long_1 = p1[1] * math.pi/180
    lat_1 = p1[0] * math.pi/180
    long_2 = p2[1] * math.pi/180
    lat_2 = p2[0] * math.pi/180

    dlong = long_1 - long_2
    dlat = lat_1 - lat_2
    a = math.sin(dlat / 2) ** 2 + math.cos(lat_1) * math.cos(lat_2) * (math.sin(dlong / 2) ** 2)
    c = 2 * 3950 * math.asin(math.sqrt(a))
    result = round(c)
    print(result,"miles")
    return result

Solution

  • Use a dictionary to map state names to coordinates

    states = {
        "washington_dc": (38.9072, 77.0369),
        "north_carolina": (35.7596, 79.0193),
        "florida": (27.6648, 81.5158),
        "hawaii": (19.8968, 155.5828),
        "california": (36.7783, 119.4179),
        "utah": (39.3210, 111.0937)
    }
    
    while True:
        state1 = input("First state: ")
        if state1 in states:
            break;
        else:
            print("I don't know that state, try again")
    
    while True:
        state2 = input("Second state: ")
        if state2 in states:
            break;
        else:
            print("I don't know that state, try again")
    
    distance_calc(states[state1], states[state2])