无法将复数转换为在python 3上浮动

时间:2018-06-20 09:12:18

标签: python-3.x

我为uri在线法官编写此代码(问题1036)...这是Bhaskara的公式...

import cmath
A,B,C=input().split()
A = float(A)
B = float(B)
C = float(C)
D = (B*B)-(4*A*C)
if((D== -D)|(A==0)):
    print("Impossivel calcular")

else:
    T = cmath.sqrt(D)
    x1 = (-B+T)/(2*A)
    x2 = (-B-T)/(2*A)
    print("R1 = %.5f" %x1)
    print("R2 = %.5f" %x2)

但是当我提交这个程序时...发生了运行时错误...

Traceback (most recent call last): File "Main.py", line 14, in
    print("R1 = %.5f" %x1)
TypeError: can't convert complex to float
Command exited with non-zero status (1)

请帮助我解决这个问题。

2 个答案:

答案 0 :(得分:0)

问题在于您的格式字符串仅用于floats,而不是复杂的数字。这样的事情会起作用:

print('{:#.3} '.format(5.1234 + 4.123455j))
# (5.12+4.12j) 

或-更明确:

print('{0.real:.3f} + {0.imag:.3f}i'.format(5.123456789 + 4.1234556547643j))
# 5.123 + 4.123i

您可能想看看format specification mini language

#作为格式说明符不适用于旧式%格式...

那么您的代码还有更多问题:

if((D== -D)|(A==0)):

为什么不if D==0:?为此,最好使用cmath.isclose

然后:|是您使用它的方式的逐位运算符;您可能希望将其替换为or

您的if语句可能如下所示:

if D == 0 or A == 0:
# or maybe
# if D.isclose(0) or A.isclose():

答案 1 :(得分:0)

使用从sqrt导入的cmath的问题是它输出一个complex数字,该数字无法转换为float。如果要从正数计算sqrt,请使用math库(请参见下文)。

>>> from cmath import sqrt
>>> sqrt(2)
(1.4142135623730951+0j)
>>> from math import sqrt
>>> sqrt(2)
1.4142135623730951