How to find `n-th` root of a given 'x' algorithmically

def solve(x, n):
    if x == 0:
        return 0
    lower = 0
    upper = max(1, x)
    mid = (lower + upper) / 2

    while ((mid-lower) >= 0.001):
        if (mid ** n > x):
            upper = mid
        else:
            lower = mid
        mid = (lower + upper) / 2

    return round(mid, 3)

# solve(7, 3) would return 1.913
# solve(9, 2) would return 3.0