Bonjour,
je bloque sur le code d'une fonction utilisant des boucles while, qui prend en arguments une (grande) liste de nombres et un entier naturel, et qui doit retourner une nouvelle liste formée des éléments qui sont la somme n à n des éléments de la première.
Voilà ce que j'ai fait avec une liste en exemple, et la fonction qui devrait me retourner [6, 15, 24] et qui renvoie [6, 15, 28].
Je vous remercie par avance pour votre aide.

bonjour Theo92
à mon humble avis, ton algorithme est bien alambiqué pour un programme a priori aussi simple.
tu devrais en revoir la structure.
par exemple, il ressort que le 3ème élément de new_liste, donc new_liste[2], est la somme 15 + 6 + 7,
alors que tu souhaites 7+8+9.
pour voir pas à pas comment tourne ton programme, connais-tu
?
(accès direct en ligne)
tu copies-colles ton code
vizualize execution
touche next pour voir pas à pas où en sont tes variables.
ps : la prochaine fois, plutôt que de mettre l'image de ton code,
tu pourras le copier-coller ici, entre les balises </>, bouton sous la fenêtre de saisie.
cela permettra à ceux qui le souhaitent de récupérer ton code pour l'étudier.
salut
et que se passe-t-il si len(L) n'est pas multiple de n ? (*)
c'est un code extrêmement compliqué ... et que je ne comprends pas d'ailleurs
tu veux additionner :
1 + 2 + 3
4 + 5 + 6
7 + 8 + 9
il me semble que somme_n doit être remis à 0 après chacun des calculs ...
et des boucle for me semble bien plus efficace ...
et pour régler le pb de (*) je regarderai plutôt en travaillant modulo n
def somme (L, n) :
new = []
q = len(L)//n ## division entière
for k in range (q) :
sum = 0
for i in range (n) :
sum += L[k + i]
new.append(sum)

Merci à vous tous.
Je suis désolé pour l'éventuel multipost, mais je crois sincèrement que les problèmes ne sont pas identiques.
Merci Carita pour le site.
Merci Carpediem pour avoir tant dégrossi la question que je ne savais pas bien aborder. En même temps, l'énoncé du problème recommande une boucle while.....
Je vais tenter de m'en sortir.
Bonne journée.
bonjour carpediem
j'étais en train de commencer à taper une trame de code très similaire à la tienne.
donc merci à toi de m'éviter cette étape
je rajoute juste une info qui peut être utile à Theo92, selon la façon dont il abordera son algorithme,
ou sur d'autres programmes : le "tranchage" de liste.
par ex ici, si on veut travailler sur une liste 'propre',
i.e. débarrassée une fois pour toutes des éléments qui ne serviront pas - les (len(L)%n) derniers de la liste - , on peut faire :
L=[1,2,3,4,5,6,7,8,9,10,11]
n=3
q = len(L)//n
L_2 = L[0:q*n]
[1, 2, 3, 4, 5, 6, 7, 8, 9]oui j'y avais pensé ...
mais je supprimerai plutôt les n premiers termes que j'ai sommés ... comme ça je somme toujours les n premiers termes de la nouvelle liste ...

Bonsoir,
il me semble que l'on peut utiliser
sum(L[k:k+n]) pour faire la somme des n termes de L à partir de L[k] jusqu'à L[k+n-1].
for k in range(0,len(L),n) : pour que k augmente de n à chaque itération.oui des fonctions extrêmement condensées permettent de résoudre ce pb immédiatement ...
mais il est plus intéressant/stimulant de ne pas s'en servir ...

C'est quand même des fonctions de base en Python.
Pour la somme je veux bien admettre que c'est un peu caché, mais pour la boucle « for » c'est vraiment basique.
Après il est évident que l'on peut tout écrire avec des boucles « while ».
Mais savoir que a//b désigne le quotient entier de a divisé par b ne me semble pas moins « spécial » que de savoir que l'on peut choisir la valeur de l'incrément dans une itération.
bonjour à tous
Theo92, comme tu peux le voir, il y a de nombreuses façons de coder ce programme.
tout dépend de l'algorithme (de la logique) que tu choisis, et des outils à disposition,
qui permettent un code plus ou moins compact.
du moment que le code "tourne" bien, et respecte les bonnes pratiques, tout est valable !
... ceci pour dire que tu peux nous soumettre un algorithme autre que ceux évoqués ci-dessus,
et le coder avec des commandes que tu maitrises déjà - ce qui est sans doute attendu par ton professeur.
n'hésite pas venir le partager
tu peux, avant de coder, venir partager ton algo en langage naturel, pour validation.
a+
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :