Ну к примеру потому, что у вас промежуток и корни совпадают.
Корни -7, 1, 2
Ну и функция от -7, 1, 2 равна 0, а не отрицательна.
и получается, что условие надо переписать:
Код:
if float(fun(i)) * float(fun(i - 1)) <= 0:
но тогда в функции promice будет деление на ноль так как значения промежутка a и b могут содержать корни. в общем надо играться с шагом