Eu fiz assim:
def Secante(f,xat,xant,*args):
"""
Primeiro argumento livre é o contador e o segundo é a tolerância. Se não for preenchido, tolerância é de 10⁻5
e o contador máximo é 200
"""
if not args:
tol = 1e-5
contador = 200
elif len(args) == 1:
tol = 1e-5
contador = args[0]
else:
tol = args[1]
contador = args[0]
cont = 0
tol = 1e-5
while True:
xsuc = xat - ((xat - xant)/(f(xat) - f(xant)))*f(xat)
erro = abs((xsuc - xat)/xsuc)
xant = xat
xat = xsuc
cont += 1
if cont>contador:
break
if erro<tol:
break
return float('%.2f'%xat)