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:
Pour calculer les termes que je veux rentrer dans la liste, j'ai utilisé la fonction fact suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Si vous pouvez m'aider à trouver la source de l'erreur,
Bien cordialement.
Partager