Python 3.4.1 - 不要显示最终结果?

时间:2014-09-10 22:41:49

标签: python python-3.4

使用Bhaskara formule制作程序以找到二次方程的根:

使用公式计算平方根:数字** 0.5

我可以把a,b和c放在一起,但是当我运行程序时,它并没有显示根x1和x2的结果...

到目前为止,这是我的代码:

a = int(input("a ")) 
b = int(input("b ")) 
c = int(input("c ")) 
delta = b * b - 4 * a * c 
if (delta >= 0): 
   x1 = (-b + delta ** 0.5) / 2 * a 
   x2 = (-b - (delta) ** 0.5) / 2 * a 
   print("x1: ", x1) 
   print("x2: ", x2) 

1 个答案:

答案 0 :(得分:1)

所有abc实数值都有两个根(除了delta为0的情况除外) - 但有时根是复数,而不是实数

特别是,如果我没记错的话:

  • 如果delta > 0,则有两个真正的根源。
  • 如果delta == 0,则只有一个根,即实数-b/(2*a)
  • 如果delta < 0,则有两个复杂的根(总是共轭)。

如果您使用复数进行数学计算,则可以对所有三种情况使用相同的公式(-b +/- delta**0.5) / 2a,并且您将获得两个实数,或0两次,或者两个复数,视情况而定。

还有一些方法可以在不进行复杂数学的情况下计算第三种情况的实部和虚部,但由于Python使复杂的数学变得容易,除非你专门试图了解这些方法,否则为什么还要费心呢?


所以,如果你总是要打印2个根,那么你所要做的就是删除if delta >= 0:行(并且接下来几行)。将负浮点数提升到0.5幂将自动给出一个复数,这将使表达式的其余部分变得复杂。像这样:

delta = b * b - 4 * a * c 
x1 = (-b + delta ** 0.5) / 2 * a 
x2 = (-b - (delta) ** 0.5) / 2 * a 
print("x1: ", x1) 
print("x2: ", x2) 

如果您只想要0-2个实根,那么您的代码已经是正确的。您可能需要为delta == 0添加支票,或仅为x1 == x2添加支票,这样您就不会两次打印相同的值。像这样:

delta = b * b - 4 * a * c 
if delta >= 0:
    x1 = (-b + delta ** 0.5) / 2 * a 
    x2 = (-b - (delta) ** 0.5) / 2 * a 
    print("x1: ", x1)
    if x1 != x2:
        print("x2: ", x2) 

如果您需要某种错误消息,您只需添加else子句即可。像这样:

delta = b * b - 4 * a * c 
if delta >= 0:
    x1 = (-b + delta ** 0.5) / 2 * a 
    x2 = (-b - (delta) ** 0.5) / 2 * a 
    print("x1: ", x1)
    print("x2: ", x2)
else:
    print('No real solutions because of negative delta: ", delta)

你想要哪一个?我不知道。这是你要回答的问题。一旦您确定了所需的输出,例如345,就可以选择为您提供输出的版本。