je suis débutant en Python mais pas en programmation (j'ai fait du C++)
J'aimerai calculer la racine carré d'un réel dans un programme utilisant
aussi des complexes.
je fais :
from math import *
from cmath import *
if sqrt(2)<3:
print('oui')
et j'ai une erreur :
TypeError: unorderable types: complex() < int()
pourtant sqrt(2) n'est pas un complexe ! Pourquoi Python me renvoie un
complexe dans ce cas ?
Lors de la surcharge de la fonction, Python n'est pas capable de choisir
la bonne version ?
Merci,
Fabrice.
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Benoit Izac
Bonjour, Le 14/01/2018 à 11:18, Fabrice a écrit dans le message <5a5b2e78$0$4843$ :
je suis débutant en Python mais pas en programmation (j'ai fait du C++) J'aimerai calculer la racine carré d'un réel dans un programme utilisant aussi des complexes. je fais : from math import * from cmath import * if sqrt(2)<3: print('oui') et j'ai une erreur : TypeError: unorderable types: complex() < int() pourtant sqrt(2) n'est pas un complexe ! Pourquoi Python me renvoie un complexe dans ce cas ?
Parce que sqrt() provient du module cmath.
Lors de la surcharge de la fonction, Python n'est pas capable de choisir la bonne version ?
Il n'y a pas de surcharge de fonction comme en C++ ; la fonction sqrt() du module math n'est plus accessible car remplacée par celle de cmath. Trois solutions : import math import cmath if math.sqrt(2) < 3: print('oui') -------------------------------------------------- from math import sqrt from cmath import sqrt as csqrt if sqrt(2) < 3: print('oui') -------------------------------------------------- if 2**0.5 < 3: print('oui') -- Benoit Izac
Bonjour,
Le 14/01/2018 à 11:18, Fabrice a écrit dans le message
<5a5b2e78$0$4843$426a74cc@news.free.fr> :
je suis débutant en Python mais pas en programmation (j'ai fait du C++)
J'aimerai calculer la racine carré d'un réel dans un programme
utilisant aussi des complexes.
je fais :
from math import *
from cmath import *
if sqrt(2)<3:
print('oui')
et j'ai une erreur :
TypeError: unorderable types: complex() < int()
pourtant sqrt(2) n'est pas un complexe ! Pourquoi Python me renvoie un
complexe dans ce cas ?
Parce que sqrt() provient du module cmath.
Lors de la surcharge de la fonction, Python n'est pas capable de
choisir la bonne version ?
Il n'y a pas de surcharge de fonction comme en C++ ; la fonction sqrt()
du module math n'est plus accessible car remplacée par celle de cmath.
Trois solutions :
import math
import cmath
if math.sqrt(2) < 3:
print('oui')
--------------------------------------------------
from math import sqrt
from cmath import sqrt as csqrt
if sqrt(2) < 3:
print('oui')
--------------------------------------------------
if 2**0.5 < 3:
print('oui')
Bonjour, Le 14/01/2018 à 11:18, Fabrice a écrit dans le message <5a5b2e78$0$4843$ :
je suis débutant en Python mais pas en programmation (j'ai fait du C++) J'aimerai calculer la racine carré d'un réel dans un programme utilisant aussi des complexes. je fais : from math import * from cmath import * if sqrt(2)<3: print('oui') et j'ai une erreur : TypeError: unorderable types: complex() < int() pourtant sqrt(2) n'est pas un complexe ! Pourquoi Python me renvoie un complexe dans ce cas ?
Parce que sqrt() provient du module cmath.
Lors de la surcharge de la fonction, Python n'est pas capable de choisir la bonne version ?
Il n'y a pas de surcharge de fonction comme en C++ ; la fonction sqrt() du module math n'est plus accessible car remplacée par celle de cmath. Trois solutions : import math import cmath if math.sqrt(2) < 3: print('oui') -------------------------------------------------- from math import sqrt from cmath import sqrt as csqrt if sqrt(2) < 3: print('oui') -------------------------------------------------- if 2**0.5 < 3: print('oui') -- Benoit Izac
Pierre Maurette
Fabrice :
Bonjour, je suis débutant en Python mais pas en programmation (j'ai fait du C++) J'aimerai calculer la racine carré d'un réel dans un programme utilisant aussi des complexes. je fais : from math import * from cmath import * if sqrt(2)<3: print('oui') et j'ai une erreur : TypeError: unorderable types: complex() < int() pourtant sqrt(2) n'est pas un complexe ! Pourquoi Python me renvoie un complexe dans ce cas ? Lors de la surcharge de la fonction, Python n'est pas capable de choisir la bonne version ?
Le problème est dans vos import * sqrt est dans math et dans cmath. (Je suppose que) les import de cmath, ultérieurs, masquent ceux de math. sqrt(2) devient cmath.sqrt(2) qui est valide et renvoie un complexe. L'import * est généralement déconseillé. Je réserve cette notation à des bibliothèques personnelles pour lesquelles je veille à ce que les noms importés soient qualifiés (improbables). Ce qui vous arrive est en quelque sorte une chance. Si vous souhaitez alléger votre code, vous pourriez : from math import * import cmath as c Mais il me semble que même seul la première ligne peut poser problèmes. Donc: import math as M import cmath as C Mais je préfère me contenter de import math import cmath et de qualifier les appels. Avec la complétion c'est même plus souple. -- Pierre Maurette
Fabrice :
Bonjour,
je suis débutant en Python mais pas en programmation (j'ai fait du C++)
J'aimerai calculer la racine carré d'un réel dans un programme utilisant
aussi des complexes.
je fais :
from math import *
from cmath import *
if sqrt(2)<3:
print('oui')
et j'ai une erreur :
TypeError: unorderable types: complex() < int()
pourtant sqrt(2) n'est pas un complexe ! Pourquoi Python me renvoie un
complexe dans ce cas ?
Lors de la surcharge de la fonction, Python n'est pas capable de choisir la
bonne version ?
Le problème est dans vos import *
sqrt est dans math et dans cmath. (Je suppose que) les import de cmath,
ultérieurs, masquent ceux de math. sqrt(2) devient cmath.sqrt(2) qui
est valide et renvoie un complexe.
L'import * est généralement déconseillé. Je réserve cette notation à
des bibliothèques personnelles pour lesquelles je veille à ce que les
noms importés soient qualifiés (improbables). Ce qui vous arrive est en
quelque sorte une chance. Si vous souhaitez alléger votre code, vous
pourriez :
from math import *
import cmath as c
Mais il me semble que même seul la première ligne peut poser
problèmes. Donc:
import math as M
import cmath as C
Mais je préfère me contenter de
import math
import cmath
et de qualifier les appels. Avec la complétion c'est même plus souple.
Bonjour, je suis débutant en Python mais pas en programmation (j'ai fait du C++) J'aimerai calculer la racine carré d'un réel dans un programme utilisant aussi des complexes. je fais : from math import * from cmath import * if sqrt(2)<3: print('oui') et j'ai une erreur : TypeError: unorderable types: complex() < int() pourtant sqrt(2) n'est pas un complexe ! Pourquoi Python me renvoie un complexe dans ce cas ? Lors de la surcharge de la fonction, Python n'est pas capable de choisir la bonne version ?
Le problème est dans vos import * sqrt est dans math et dans cmath. (Je suppose que) les import de cmath, ultérieurs, masquent ceux de math. sqrt(2) devient cmath.sqrt(2) qui est valide et renvoie un complexe. L'import * est généralement déconseillé. Je réserve cette notation à des bibliothèques personnelles pour lesquelles je veille à ce que les noms importés soient qualifiés (improbables). Ce qui vous arrive est en quelque sorte une chance. Si vous souhaitez alléger votre code, vous pourriez : from math import * import cmath as c Mais il me semble que même seul la première ligne peut poser problèmes. Donc: import math as M import cmath as C Mais je préfère me contenter de import math import cmath et de qualifier les appels. Avec la complétion c'est même plus souple. -- Pierre Maurette
Fabrice
Le 14/01/2018 à 11:46, Benoit Izac a écrit :
Il n'y a pas de surcharge de fonction comme en C++ ; la fonction sqrt() du module math n'est plus accessible car remplacée par celle de cmath.
Ah ! J'ai cru qu'il y en avait car les opérateurs sont surchargés. Merci pour votre réponse rapide et très pédagogique. Fabrice. --- L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast. https://www.avast.com/antivirus
Le 14/01/2018 à 11:46, Benoit Izac a écrit :
Il n'y a pas de surcharge de fonction comme en C++ ; la fonction sqrt()
du module math n'est plus accessible car remplacée par celle de cmath.
Ah ! J'ai cru qu'il y en avait car les opérateurs sont surchargés.
Merci pour votre réponse rapide et très pédagogique.
Fabrice.
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Il n'y a pas de surcharge de fonction comme en C++ ; la fonction sqrt() du module math n'est plus accessible car remplacée par celle de cmath.
Ah ! J'ai cru qu'il y en avait car les opérateurs sont surchargés. Merci pour votre réponse rapide et très pédagogique. Fabrice. --- L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast. https://www.avast.com/antivirus
Fabrice
Merci Pierre pour votre réponse argumentée et pédagogique. --- L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast. https://www.avast.com/antivirus
Merci Pierre pour votre réponse argumentée et pédagogique.
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Merci Pierre pour votre réponse argumentée et pédagogique. --- L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast. https://www.avast.com/antivirus
Benoit Izac
Bonjour, Le 14/01/2018 à 12:06, Fabrice a écrit dans le message <5a5b39c0$0$3842$ :
Il n'y a pas de surcharge de fonction comme en C++ ; la fonction sqrt() du module math n'est plus accessible car remplacée par celle de cmath.
Ah ! J'ai cru qu'il y en avait car les opérateurs sont surchargés.
Il ne sont pas surchargés, ils se comportent différemment selon le type des objets sur lesquels ils s'appliquent. Tu peux faire la même chose avec une fonction : def f(arg): if isintance(arg, int): # faire quelque chose avec cet int elif isinstance(arg, float): # faire quelque chose avec ce float elif isinstance(arg, complex): # faire quelque chose avec ce complex else: # faire quelque chose f() se comporte différemment selon le type de l'argument mais, contrairement à C++, il n'y a qu'une fonction f(), ce n'est donc pas un mécanisme de surcharge. -- Benoit Izac
Bonjour,
Le 14/01/2018 à 12:06, Fabrice a écrit dans le message
<5a5b39c0$0$3842$426a74cc@news.free.fr> :
Il n'y a pas de surcharge de fonction comme en C++ ; la fonction sqrt()
du module math n'est plus accessible car remplacée par celle de cmath.
Ah ! J'ai cru qu'il y en avait car les opérateurs sont surchargés.
Il ne sont pas surchargés, ils se comportent différemment selon le type
des objets sur lesquels ils s'appliquent. Tu peux faire la même chose
avec une fonction :
def f(arg):
if isintance(arg, int):
# faire quelque chose avec cet int
elif isinstance(arg, float):
# faire quelque chose avec ce float
elif isinstance(arg, complex):
# faire quelque chose avec ce complex
else:
# faire quelque chose
f() se comporte différemment selon le type de l'argument mais,
contrairement à C++, il n'y a qu'une fonction f(), ce n'est donc pas un
mécanisme de surcharge.
Bonjour, Le 14/01/2018 à 12:06, Fabrice a écrit dans le message <5a5b39c0$0$3842$ :
Il n'y a pas de surcharge de fonction comme en C++ ; la fonction sqrt() du module math n'est plus accessible car remplacée par celle de cmath.
Ah ! J'ai cru qu'il y en avait car les opérateurs sont surchargés.
Il ne sont pas surchargés, ils se comportent différemment selon le type des objets sur lesquels ils s'appliquent. Tu peux faire la même chose avec une fonction : def f(arg): if isintance(arg, int): # faire quelque chose avec cet int elif isinstance(arg, float): # faire quelque chose avec ce float elif isinstance(arg, complex): # faire quelque chose avec ce complex else: # faire quelque chose f() se comporte différemment selon le type de l'argument mais, contrairement à C++, il n'y a qu'une fonction f(), ce n'est donc pas un mécanisme de surcharge. -- Benoit Izac