Mon Labo Python

Comment faire la somme d'une liste python pour ses premiers calculs

Comment faire la somme d'une liste python : calcul de liste pour une débutante en programmation

Dix lignes de code, ramenées à une seule : voilà ce que ma table de cuisine m'a appris ce soir-là sur l'addition d'une liste de chiffres en Python. Je voulais juste transformer mes dépenses de la semaine en un total, sans sortir la calculatrice, et j'étais persuadée que ça allait me prendre un moment. Pour une débutante en programmation qui bricole sa formation python entre deux tasses de tisane, apprendre le python revient souvent à ça : partir du chemin compliqué avant de tomber, presque par hasard, sur le raccourci.

L'ordinateur, le même depuis le début, traîne encore sur la table en formica de la cuisine, entre un cahier plein de flèches et des post-it qui débordent du clavier, sous le plafonnier jaune qui est la seule lumière de la pièce puisqu'un bureau, je n'en ai jamais eu. Le ventilateur du laptop s'est mis à ronfler un peu plus fort après ma deuxième tisane, comme s'il devinait que j'allais encore traîner devant l'écran plus longtemps que prévu.

sum() fait le calcul de liste en une seule ligne

Une liste en Python, ce sont juste des nombres rangés entre crochets, quelque chose comme mes_depenses = [12.50, 45.00, 8.20] ; la manière de les ranger et de les relire dans le détail mérite tout un article à elle seule, alors je ne m'y attarde pas ici. Ce qui compte pour additionner cette liste, c'est une seule fonction déjà prête à l'emploi : total = sum(mes_depenses). Pas de variable à initialiser à part, pas de boucle à écrire, juste ce mot et des parenthèses. C'est la première chose à essayer dès qu'il faut additionner une liste, quelle que soit sa longueur.

Apprendre les opérateurs mathématiques en python pour progresser enfin m'avait déjà aidée à poser les bases du calcul, mais découvrir qu'une fonction toute faite existait pour ce genre de travail, c'était passer du hachoir manuel au robot multifonction dans ma cuisine. Personne ne m'avait dit qu'on pouvait sauter directement à la version simple.

Les boucles for pour une débutante en programmation

Ma première idée avait été de construire ce total à la main, comme à l'école primaire : une variable posée à zéro, total = 0, puis for depense in mes_depenses: total = total + depense pour ajouter chaque nombre un par un. Ça fonctionne, et ça reste utile à connaître dans les grandes lignes, même si le détail de ces boucles — pourquoi elles s'écrivent comme ça, ce qu'on peut glisser dedans — je le garde pour une autre soirée tant il y a à en dire.

Carnet de brouillon annoté pendant l'apprentissage du python, avec une erreur de calcul de liste corrigée à la main

La première fois que j'ai écrit ce for sans avoir le cahier ouvert à côté du clavier pour vérifier chaque mot, il a tourné du premier coup, et j'étais presque déçue de ne pas avoir eu de message d'erreur à décortiquer pendant vingt minutes.

Elle garde son intérêt dès qu'il faut faire autre chose en chemin : filtrer certaines dépenses, les transformer, les compter à part. Pour un simple total, sum() suffit largement et évite d'inventer une variable de plus, avec le risque bien réel de la mal orthographier et de se retrouver face à un NameError qui ne pardonne pas une lettre manquante.

Le piège des nombres à virgule flottante

Le jour où j'ai voulu pousser mes calculs un peu plus loin pour un petit budget prévisionnel, le résultat a affiché quelque chose comme 100.00000000000002. Ce petit '2' qui traîne à la fin, ce n'est pas un bug de ma part : c'est lié à la précision des nombres à virgule flottante, un standard informatique mondial. Python traduit nos chiffres décimaux en binaire, et cette traduction n'est pas toujours parfaite, un peu comme quand j'essaie de traduire une expression française mot à mot en anglais.

Perrine, qui me lit depuis Bordeaux, a laissé un « moi aussi ! » sous un de mes billets sur ce genre d'erreur de débutante : elle automatise ses tableaux Excel de comptable et ce type de décalage, même minuscule, l'inquiète bien plus que moi.

Pour mes courses de la semaine, cette imprécision ne change rien. Pour quiconque manipule des centimes avec exactitude, mieux vaut se méfier de sum() tel quel et vérifier le résultat avant de s'y fier les yeux fermés — c'est la règle que je garde en tête depuis.

Écran affichant le résultat d'un calcul de liste en python, avec l'arrondi étrange de la virgule flottante

Donner un point de départ au calcul avec sum()

Le deuxième détail que j'ai fini par découvrir, c'est que sum() accepte un point de départ. Si j'ai déjà dix euros dans ma tirelire et que je veux y ajouter une liste de gains, j'écris sum(mes_gains, 10) : le second argument fixe la valeur de départ du calcul, sans qu'il faille écrire une ligne de plus pour l'ajouter après coup.

Ce que je vérifie avant de faire confiance à un total

Je combine maintenant len() et sum() pour sortir une moyenne en un instant, depuis que j'ai pris le temps de vraiment utiliser la fonction len en python pour compter mes éléments. Avant de faire confiance à un résultat, je regarde surtout deux choses : est-ce qu'il y a des décimales dans la liste, et est-ce que le total sert à quelque chose où l'exactitude compte vraiment.

Un MOOC en ligne m'avait semblé la solution la plus sérieuse pour apprendre plus vite, avant tout ça ; je l'ai laissé tomber après la deuxième semaine, perdue dans des exercices trop abstraits pour parler à mes soirées de cuisine. C'est plutôt en grappillant dix minutes par-ci par-là, un peu comme j'ai fini par trouver le temps d'apprendre le langage python après une journée chargée, que ce genre de détail a fini par tenir en place dans ma tête.

Cassandre, mon amie d'enfance, a eu droit à un message pour lui annoncer ma ligne de code toute simple ; elle ne touchera sans doute jamais à Python, mais elle a cette manie de me rappeler qu'apprendre lentement ne veut pas dire mal apprendre.

Il me reste une question ouverte, celle de savoir jusqu'où pousser sum() avant de devoir sortir des outils plus rigoureux pour des calculs qui ne tolèrent aucun écart. Pour mes dépenses de la semaine, en tout cas, treize caractères et un peu de méfiance envers la virgule flottante suffisent amplement.

Articles connexes