Как красиво вывести квадратное уравнение в консоль?

Написал простой код для решения квадратных уравнений. Под конец решил в качестве последнего штриха написать перед началом решения вывод итогового уравнения на экран, спустя несколько минут понял, что не понимаю, как это реализовать. Во-первых квадратное уравнение может быть таким 2x^2+5x-4 или таким -2.1x^2-4.5x+8.3 (числа перед x могут быть как отрицательными так и положительными, а также дробными или целыми). Итак, кратко вопрос такой: как сделать вывод гибким и красивым? Не хочется видеть, при вводе только целочисленных значений что-то вроде 2.0x^2+5.0x-4.0 = 0 и прочее. Код под спойлером.
Код
import math

while True:
    a = float(input('Введите a: '))
    b = float(input('Введите b: '))
    c = float(input('Введите c: '))

    d = b ** 2 - 4 * a * c
    print("\nВычисляем дискриминант...")
    print("Дискриминант равняется", d)

    if d == 0:
        print("\nДискриминант равен 0")
        print("x =", -b/(2*a))
    elif d < 0:
        print("\nДискриминант меньше 0, решений нет")
    else:
        x1 = (-b - math.sqrt(d)) / (2*a)
        x2 = (-b + math.sqrt(d)) / (2*a)
        print("\nВычисляем корни...")

        print("\nПервый корень равен", x1)
        print("Второй корень равен", x2)

    while True:

        print("\nХотите решить ещё одно уравнение?")
        answer = input('Y/n(help - справка по командам) ')

        if answer == 'Y':
            break
        elif answer == 'n':
            exit()
        elif answer == 'help':
            print(open('help.txt', 'r').read())
        else:
            print("\nВведите Y или n (help - справка по командам)")

  • Вопрос задан
  • 937 просмотров
Решения вопроса 1
@javedimka
Хочу сока
Если хочется оставить принудительное форматирование во float, то можно сделать так:
def quadratic_eq_formatter(nums):
    num_f = {1: '{:+.0f}', 0: '{:+.1f}'}
    eq = '{}x^2{}x{}=0'.format(*(num_f[x.is_integer()] for x in nums))
    return eq.format(*nums) if nums[0] < 0 else eq.format(*nums)[1:]

nums = (a, b, c)
print(quadratic_eq_formatter(nums))

print(quadratic_eq_formatter([-3.0, -2.7, 7.0]))
'-3x^2-2.7x+7=0'
print(quadratic_eq_formatter([2.0, 5.0, -4.0]))
'2x^2+5x-4=0'
print(quadratic_eq_formatter([-2.1, -4.5, 8.3]))
'-2.1x^2-4.5x+8.3=0'

А чтобы уж вообще красиво было, то ^2 в
eq = '{}x^2{}x{}=0'.format(*(num_f[x.is_integer()] for x in nums))

можно поменять на
eq = '{}x\u00B2{}x{}=0'.format(*(num_f[x.is_integer()] for x in nums))

тогда получится что-то типо:
print(quadratic_eq_formatter([-2.0, 5.0, 5.2]))
-2x²+5x+5.2=0
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы