Fonction python qui ne fonctionne pas correctement
Bonjour,
Dans le cadre d'une étude scientifique, je souhaiterais accumuler dans une liste plusieurs valeurs dépendant de trois paramètres variables (k, l et p) et d'un paramètre fixé (m) argument de la fonction.
Pour cela je procède par trois boucles for imbriqués:
Code:
1 2 3 4 5 6 7 8 9 10 11
| def collecteur(m):
L=[]
for k in range(1,int(m/2)+1):
for l in range(k):
if (k-l)%3==0:
for p in range(((2*(k-l))//3),int((min(m, 3*(k-l)))/3)):
L.append(((fact(m))/((fact(l))*(fact(k-l))*(fact(m-2*l-3*p))*(2**l))))
else:
for p in range(1+int((2*(k-l))/3),int((min(m, 3*(k-l)))/3)):
L.append(((fact(m))/((fact(l))*(fact(k-l))*(fact(m-2*l-3*p))*(2**l))))
return L |
Pour calculer les termes que je veux rentrer dans la liste, j'ai utilisé la fonction fact suivante:
Code:
1 2 3 4 5 6
| def fact(n):
"""fact(n): calcule la factorielle de n (entier >= 0)"""
x=1
for i in range(2,n+1):
x*=i
return x |
Cependant j'ai trouvé (en calculant sur le papier la fonction collecteur) une liste par exemple pour m=5 de longueur 6. Or sous python 3.6.1 ou python 2.7, idle me ressort la liste vide []. Je ne comprends pas pourquoi les termes ne s'accumulent pas dans la liste L pour m=5. Par ailleurs plusieurs valeurs de m me ressortent une liste vide, et quand je prends par exemple m=12 ou 13 j'obtiens une liste de longueur 3 (alors que la liste devrait être bien plus grande).
Si vous pouvez m'aider à trouver la source de l'erreur,
Bien cordialement.