二次公式:python 将浮点数视为字符串

Quadratic formula: python treating floats as strings

我正在制作一个程序,要求用户输入 a、b 和 c 的值,然后使用这些值使用二次公式计算根。我遇到的唯一问题是 python 将 a 和平方根项视为两个字符串,但它们实际上并未相加。他们之间的+被打印出来了。

这是我的代码:

import cmath

def cubic_formula(a, b, c):
    print("x1: " + str((-b-cmath.sqrt(b**2-4*a*c))/(2*a)))
    print("x2: " + str((-b+cmath.sqrt(b ** 2 - 4 * a * c)) / (2 * a)))

a = float(input("a: ")) b = float(input("b: ")) c = float(input("c: "))

cubic_formula(a, b, c)

这是输出,说明了我刚才描述的问题:

我不知道如何使加号导致两个数字的实际相加。删除 str() 并且在 print() 中没有字符串并没有改变任何东西。

您看到的是复数,而不是字符串。当判别式 b*b-4*a*c 为负时,解不是实值。虚数单位在 Python 中表示为 j,复数在 Python 中表示为 (a+bj)。 您可能想在计算之前检查判别式是否为正,并使用 math.sqrt 函数,其中 returns 一个浮点数,而不是 cmath.sqrt 函数,其中 returns 一个复数.

另请注意,您调用了函数 cubic_formula,但正在计算 quadratic_formula

我把程序分成了几个函数:

  • 行列式的计算
  • 二次公式
  • 获取用户输入
  • 打印结果

而且很好。

import cmath


def cal_determinant(a, b, c):
    return b * b - 4 * a * c


def quadratic_formula(a, b, c):
    det = cal_determinant(a, b, c)
    sqrt_det = cmath.sqrt(det)
    x1 = (-b - sqrt_det) / (2 * a)
    x2 = (-b + sqrt_det) / (2 * a)
    return x1, x2


def get_user_input():
    coeff_list = []
    for coeff_name in ["a", "b", "c"]:
        v = input(f"{coeff_name}: ")
        v = float(v)
        coeff_list.append(v)
    return coeff_list


def print_roots(x1, x2):
    print(f"x1: {x1}")
    print(f"x2: {x2}")


def main():
    a, b, c = get_user_input()
    x1, x2 = quadratic_formula(a, b, c)
    print_roots(x1, x2)


main()