Если значение всегда должно быть целым числом, используй целочисленные операции, в т.ч. деление // вместо /.
Если число может быть целым или дробным, но целое надо выводить, как целое, а дробное - как дробное, то есть два пути:
1) Смотрим, равно ли число самому себе с отброшенной дробной частью:
print(int(n) if n == int(n) else n)
2) Отрезаем нули и точку с конца строкового представления числа, если есть нули:
print(str(n).rtrim('0').rtrim('.'))
Оба способа выглядят нелепо для "языка с батарейками в комплекте", но я ничего приличнее не нашёл, а рылся долго, когда мне это было нужно. Можно оформить форматирование функцией, чтобы не писать каждый раз эти заклинания.
Есть и третий способ: использовать не float, а decimal, который хранит точное количество значащих цифр. Но здесь придётся серьёзно пересмотреть подход своей программы к вычислениям, что может выйти далеко за рамки просто форматирования результата.
a = int(input())
b = int(input())
n=(h-b)/(a-b)
print(n)