Bonjour,
j'ai une fonction qui doit me retourner la puissance d'un nombre et je dois utiliser les listes avec compréhension.
Le test sur les paramètres n'était pas à faire mais j'aimerais comprendre.
C'est le résultat de ma fonction sans prendre le test des paramètres
et j'obtiens bien ce qu'il faut :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 def my_pow(m,b): if type(m) != int or type(b) != float: return None return [b**m for m in range(0,m)] print("SI type(m) != int OU type(b) != float ALORS on retourne None") print(" - Pour type(m) != int => ",my_pow(3.0,4)) print(" - Pour type(b) != float => ",my_pow(3,4)) print("SINON on calcule b**m pour les valeurs du range") print(my_pow(3,4.0))
j'ai essayé en regardant la fonction ternaire d'inclure les tests mais j'ai plusieurs problèmes et j'aimerais comprendre pourquoi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SI type(m) != int OU type(b) != float ALORS on retourne None - Pour type(m) != int => None - Pour type(b) != float => None SINON on calcule b**m pour les valeurs du range [1.0, 4.0, 16.0]
J'ai écrit :
je ne comprends pas cette erreur quand je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 def my_pow2(m,b): return [b**m if isinstance(m, int) and isinstance(b, float) else None for m in range(0,m)]
alors que quand je fais l'appel
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 print("SI type(m) != int OU type(b) != float ALORS on retourne None") print(" - Pour type(m) != int => ",my_pow2(3.0,4)) Traceback (most recent call last): File "main.py", line 19, in <module> print(" - Pour type(m) != int => ",my_pow2(3.0,4)) File "main.py", line 16, in my_pow2 return [b**m if isinstance(m, int) and isinstance(b, float) else None for m in range(0,m)] TypeError: 'float' object cannot be interpreted as an integer
il retourne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 print("SI type(m) != int OU type(b) != float ALORS on retourne None") print(" - Pour type(b) != float => ",my_pow2(3,4))
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SI type(m) != int OU type(b) != float ALORS on retourne None - Pour type(b) != float => [None, None, None]
- Pourquoi il ne gère pas isinstance du int - paramètre m - mais celui du float - paramètre b - oui ?
- Comment faire pour n'avoir qu'un retour et non une liste [None, None, None] ?
Par avance merci pour toutes vos explications, liens qui pourraient me guider.
Partager