In [5]:
    
from numpy import exp
## Parameters
a = 1
b = 0.1
epsilon = 1
def supply(price):
    return exp(b*price) - 1
def demand(price):
    return a*(price**(-epsilon))
mxiter = 30
toler = 1.0e-6
plow = 0.1
phigh = 10.0
niter = mxiter
for i in range(mxiter):
    pcur = (plow + phigh)/2
    yd = demand(pcur)
    ys = supply(pcur)
    excesssupply = ys - yd
    if excesssupply > 0:
        phigh = pcur
    else:
        plow = pcur
    diff = abs(phigh - plow)
    if diff <= toler:
        niter = i
        break
pclear = (plow + phigh)/2
yd = demand(pcur)
ys = supply(pcur)
excesssupply = ys - yd
outputs = (niter, pclear, yd, ys, excesssupply)
for output in outputs:
    print(output)
    
    
In [ ]: