任务要求
任务描述
本关任务:编写Python程序,计算二次方程 ( ax^2 + bx + c = 0 ) 的根。如果方程有实根,则输出实根;如果方程有虚根,则输出共轭的虚根。
测试例子说明
平台会对你编写的代码进行测试:
测试输入:1 -3 2 预期输出: 方程有两个不同的实根: 2.0 和 1.0
相关知识
为了完成本关任务,你需要掌握:
- 如何使用Python的math和cmath库
- 二次方程的求根公式
使用Python的math库
Python的math库提供了一系列数学函数,其中sqrt函数可以用来计算平方根。
import math
result = math.sqrt(16) # result will be 4.0
使用Python的cmath库
对于负数的平方根,我们需要使用Python的cmath库,它可以处理复数。
import cmath
result = cmath.sqrt(-1) # result will be 1j, which represents the imaginary unit
最终代码
import cmath
#hint: 把your_case换成需要判断的对象!
a, b, c = map(float, input().split())
########input your code here#########
# 判断a是否为0
if a == 0:
if b!=0:
print(f"方程有一个实根: {-c/b}")
else:
if c==0: #这个if是在上一级if b!=0的else情况逻辑下的,相当于在b等于0条件下,不需要在控制b==0 一次。
print("方程有无数个解")
else:
print("方程无解")
else:
# 计算判别式
d=b**2-4*a*c #d表示了delta
# 计算根
if d > 0:
dr = cmath.sqrt(d) #注意检查最开始import了什么,虽然此处用math就能解决,但开头import cmath,故应用cmath.sqrt.
root1 = (-b+dr)/(2*a)
root2 = (-b-dr))/(2*a)
print(f"方程有两个不同的实根:" .root1.real ,"和" ,root2.real)
elif d==0:
print(f"方程有一个实根: {-b/(2*a)}")
else:
df = cmath.sqrt(d)
root1 = (-b+df)/(2*a)
root2 = (-b-df)/(2*a)
print(f"方程有两个虚根: {root1} 和 {root2}")
########end of your code #########
易错细节
-
错因及修正:四则运算未清晰表达,补充乘号及括号
print(f"方程有一个实根: {-b/2a}") 改为 print(f"方程有一个实根: {-b/(2*a)}")
-
错因及修正:混入了用中文输入法输入的符号,改为英文输入法
print(f"方程有两个不同的实根: {root1.real},和{root2.real}”) ^ SyntaxError: unterminated string literal
-
错因及修正:错误理解名称及表达,不能用root1.real, 应先定义root1。root2同理。
root1.real = (-b+dr)/(2*a) 改为 root1= (-b+dr)/(2*a)
相关知识:real 为Python里的一个函数,有取实部的功能。用法:xxx.real #xxx为被取实部对象。