练习python两天半遇到的小问题

想练习一下if语句但是用法好像有点错误。注:代码的意思大概是通过判断二次方程(公式法)的根来判定判别式的情况

a = float(input("输入a的值"))
b = float(input("输入b的值"))
c = float(input("输入c的值"))
x_f = (-b + (b**2 - 4*a*c)**(1/2)) / 2*a
x_s = (-b - (b**2 - 4*a*c)**(1/2)) / 2*a


if x_f > x_s:
    print("判别式大于0")

if x_f < x_s:
    print("判别式大于0")

elif x_f == x_s:
    print("判别式等于0")

else:
    print("此方程无实根")


给出的错误提示是:TypeError: '>' not supported between instances of 'complex' and 'complex'
在经历了无(没)数(有)次的头脑风暴后还是来问了,如果不能带入具体事例那这个应该怎么写

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:

  这个错误提示说明了你的代码中出现了复数(complex)的比较,而Python中默认不支持复数之间的比较。在二次方程中,当判别式小于0时会出现复数根。

  为了避免这个错误,你可以使用if语句的isinstance()函数来判断x_f和x_s是否为实数(float)类型。同时,你的代码中在判断x_f和x_s大小时,应该使用ifelif语句的嵌套结构,具体修改后如下代码。

具体代码修改后如下:

a = float(input("输入a的值"))
b = float(input("输入b的值"))
c = float(input("输入c的值"))

delta = b**2 - 4*a*c

if isinstance(delta, complex):
    print("此方程无实根")
else:
    x_f = (-b + delta**(1/2)) / (2*a)
    x_s = (-b - delta**(1/2)) / (2*a)
    if x_f > x_s:
        print("判别式大于0")
    elif x_f < x_s:
        print("判别式大于0")
    else:
        print("判别式等于0")

在上面的代码中,我们首先计算出判别式delta,然后使用isinstance()函数判断delta是否为复数类型。如果是,则输出“此方程无实根”,否则再根据x_f和x_s的大小关系判断判别式的情况。注意要将2*a写在括号内,避免运算顺序错误导致计算错误。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

参考GPT和自己的思路:您好,根据代码的错误提示,我猜测您输入的系数 a、b、c 使得二次方程的判别式小于零,从而使得 x_f 和 x_s 为虚数(complex)。而在 Python 中,虚数(complex)是不能与实数(float)或整数(int)进行比较的,所以会出现 “TypeError: '>' not supported between instances of 'complex' and 'complex'” 的错误。

针对这个问题,可以在 if 语句条件中添加一项判断,用 cmath 库中的实部(real)函数取出虚数的实部来进行比较,代码如下:

import cmath

a = float(input("输入a的值"))
b = float(input("输入b的值"))
c = float(input("输入c的值"))
x_f = (-b + (b**2 - 4*a*c)**(1/2)) / 2*a
x_s = (-b - (b**2 - 4*a*c)**(1/2)) / 2*a

if x_f.imag == 0 and x_s.imag == 0:
    if x_f.real > x_s.real:
        print("判别式大于0")
    elif x_f.real < x_s.real:
        print("判别式小于0")
    else:
        print("判别式等于0")
else:
    print("此方程无实根")

添加的这个条件判断语句可以解决虚数比较的问题。当 x_f.imag 和 x_s.imag 都等于 0 时,说明二次方程有两个实数解,然后可以对实数部分进行比较。如果两个实数解相等,则判别式等于 0,否则判别式大于 0。当其中一个数为虚数时,则直接输出此方程无实根。

希望这个解答对您有帮助,如果还有问题可以继续咨询。