1. ホーム
  2. python-3.x

[解決済み] Python 3 で complex を float に変換できない。

2022-02-07 04:53:22

質問

uri online judge(問題番号1036)のためにこのコードを書きました。

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)

この問題を解決するために私を助けてください。

どのように解決するのですか?

問題は、あなたのフォーマット文字列が 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

をご覧になってみてください。 書式指定ミニ言語 .

# を書式指定子として使用すると、古い形式の % のフォーマットが...

となると、あなたのコードにはもっと問題があることになります。

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():