6 votes

Impossible de convertir un complexe en flottant sur python 3

J'ai écrit ce code pour uri online judge(problème no.1036)...C'est une formule de 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)

mais quand je soumets ce programme... cette erreur d'exécution s'est produite...

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)

veuillez m'aider à résoudre ce problème.

3voto

Tomasz Bartkowiak Points 197

Le problème de l'utilisation de sqrt importé de cmath est qu'il produit un complex qui ne peut être converti en float . Si vous calculez un sqrt à partir d'un nombre positif, utilisez math (voir ci-dessous).

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

2voto

hiro protagonist Points 1983

Le problème est juste que votre chaîne de format est pour floats et pas pour les nombres complexes. Quelque chose comme ceci fonctionnera :

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

ou - plus explicite :

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

vous voudrez peut-être jeter un coup d'œil à la spécification du format mini-langue .

# comme spécificateur de format ne fonctionnera pas avec l'ancien style % le formatage...

alors il y a plus de problèmes avec votre code :

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

pourquoi pas if D==0: ? et pour cela il serait préférable d'utiliser cmath.isclose .

alors : | est un opérateur de type bit-wise de la manière dont vous l'utilisez ; vous pouvez le remplacer par or .

votre if pourrait ressembler à ceci :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X