问题描述
我正在编写一个程序,要求用户输入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)
这是输出,说明了我刚刚描述的问题:
我不知道如何使加号导致两个数字的实际加法。删除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()