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

问题描述

我正在编写一个程序,要求用户输入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,c)

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

screen shot of the output on pycharm

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

解决方法

您正在看到的是复数,而不是字符串。当判别式b*b-4*a*c为负数时,该解不是实际值。虚数单位在Python中表示为j,而复数在Python中的打印方式类似于(a+bj)。 您可能需要在计算之前检查判别式是否为正,并使用math.sqrt函数(返回一个浮点数)来代替cmath.sqrt函数,该函数返回一个复数。

还要注意,您调用了函数cubic_formula,但是正在计算quadratic_formula

,

我将程序分为几个功能:

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

很好。

import cmath


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


def quadratic_formula(a,c):
    det = cal_determinant(a,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,c = get_user_input()
    x1,x2 = quadratic_formula(a,c)
    print_roots(x1,x2)


main()