Inscription / Connexion Nouveau Sujet
Niveau Maths sup
Partager :

fonction somme Python

Posté par
Theo92
12-02-22 à 13:14

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.

fonction somme Python

Posté par
carita
re : fonction somme Python 12-02-22 à 13:44

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.

Posté par
carpediem
re : fonction somme Python 12-02-22 à 13:58

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)


je te laisse finir ce code très incomplet pour traiter ce qui se passe quand k atteint q - 1 ... et qu'il faut traiter la somme des derniers termes de la liste ...

une autre idée est de remarquer que :

4 + 5 + 6 = 1 + 2 + 3 + 4 + 5 + 6 - (1 + 2 + 3) = 4 + 5 + 6 - new[0]
7 + 8 + 9 = 1 + 2 + ... + 8 + 9 = 7 + 8 + 9 - new[0] - new[1]

enfin j'arrêt là car je viens de me souvenir que tu as déjà traiter ce sujet ici : Somme 2 à 2 Python et que GBZM t'a proposé une solution

malou je ne sais si tu vas considérer le sujet de Theo92 comme du multipost ... mais ayant commencé à répondre "longuement" je n'ai pas envie d'effacer tout ce que j'ai écrit ... et qui apporte une solution différente et qui me semble intéressante ... et qui reste toutefois partielle ...

merci par avance

Posté par
carpediem
re : fonction somme Python 12-02-22 à 13:59

PS : quand j'ai répondu il n'y avait pas le msg de carita ... que je salue au passage ...

Posté par
carpediem
re : fonction somme Python 12-02-22 à 14:00

et merci carita de me permettre de comprendre un peu mieux ce code ... incompréhensible ...

Posté par
Theo92
re : fonction somme Python 12-02-22 à 14:09

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.

Posté par
carita
re : fonction somme Python 12-02-22 à 14:23

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]

retourne
[1, 2, 3, 4, 5, 6, 7, 8, 9]

Posté par
carpediem
re : fonction somme Python 12-02-22 à 14:27

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 ...

Posté par
carita
re : fonction somme Python 12-02-22 à 14:31

... tout à fait

Posté par
carpediem
re : fonction somme Python 12-02-22 à 15:15

Theo92 @ 12-02-2022 à 14:09 En même temps, l'énoncé du problème recommande une boucle while.....[/quote

on peut utiliser une boucle while mais à bon escient !!

dans tous les cas tu dois sommer n termes (sauf éventuellement les derniers où il y en aura moins) donc un for est évidemment plus pertinent ...

par contre tu peux effectivement utiliser une boucle while parce que tu utilises une condition !!!

Posté par
verdurin
re : fonction somme Python 12-02-22 à 18:08

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].

Et utiliser  
 for k in range(0,len(L),n) :
pour que k augmente de n à chaque itération.

Posté par
carpediem
re : fonction somme Python 12-02-22 à 19:20

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 ...

Posté par
verdurin
re : fonction somme Python 12-02-22 à 20:13

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.  

Posté par
carita
re : fonction somme Python 13-02-22 à 11:18

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 :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1675 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !