Indices ou valeurs ?⚓︎
On donne un tableau de nombres nombres
.
Compléter le code des deux fonctions ci-dessous :
-
somme_par_indices_pairs
prend le tableau en argument et renvoie la somme des valeurs placées à des indices pairs ; -
somme_des_valeurs_paires
prend le tableau en argument et renvoie la somme des valeurs paires.
Par exemple :
>>> # indices 0 1 2
>>> nombres = [4, 6, 3]
>>> somme_par_indices_pairs(nombres)
7
>>> somme_des_valeurs_paires(nombres)
10
En effet, :
- il y a deux indices pairs (
0
et2
) et la somme des valeurs correspondantes vaut7
. - il y a deux valeurs paires (
4
et6
) et leur somme vaut10
.
On rappelle qu'il est possible de tester la parité d'un nombre n
en faisant n % 2 == 0
:
>>> 14 % 2 == 0
True
>>> 15 % 2 == 0
False
Exemples
>>> somme_par_indices_pairs([])
0
>>> somme_des_valeurs_paires([])
0
>>> somme_par_indices_pairs([4, 6, 3])
7
>>> somme_des_valeurs_paires([4, 6, 3])
10
def sommepy-undparpy-undindicespy-undpairs(nombres):bksl-nl somme = ...bksl-nl for ... in ...:bksl-nl if ...:bksl-nl somme = ...bksl-nlbksl-nl return ...bksl-nlbksl-nldef sommepy-unddespy-undvaleurspy-undpaires(nombres):bksl-nl somme = ...bksl-nl for ... in ...:bksl-nl if ...:bksl-nl somme = ...bksl-nlbksl-nl return ...bksl-nlbksl-nl# Testsbksl-nlassert sommepy-undparpy-undindicespy-undpairs([]) == 0bksl-nlassert sommepy-unddespy-undvaleurspy-undpaires([]) == 0bksl-nlassert sommepy-undparpy-undindicespy-undpairs([4, 6, 3])== 7bksl-nlassert sommepy-unddespy-undvaleurspy-undpaires([4, 6, 3])== 10bksl-nldef sommepy-undparpy-undindicespy-undpairs(nombres):bksl-nl somme = 0bksl-nl for i in range(len(nombres)):bksl-nl if i % 2 == 0:bksl-nl somme += nombres[i]bksl-nlbksl-nl return sommebksl-nlbksl-nlbksl-nldef sommepy-unddespy-undvaleurspy-undpaires(nombres):bksl-nl somme = 0bksl-nl for x in nombres:bksl-nl if x % 2 == 0:bksl-nl somme += xbksl-nlbksl-nl return sommebksl-nlbksl-nl
A
Solutions alternatives⚓︎
Pour le parcours sur les indices, on pourrait aussi jouer sur le pas :
def somme_par_indices_pairs(nombres):
somme = 0
for i in range(0, len(nombres), 2):
somme += nombres[i]
return somme
Dans ce cas, on ne lit qu'un indice sur deux en débutant à 0
.
Dans le même esprit, les tranches permettent de modifier les listes en omettant certains indices :
def somme_par_indices_pairs(nombres):
somme = 0
for x in nombres[::2]:
somme += x
return somme
Dans ce cas, on indique à Python de ne prendre qu'un nombre x
sur deux. La notation nombres[::2]
est un raccourci pour
nombres[0:len(nombres):2]
.
Approche fonctionnelle⚓︎
D'autre part, la fonction sum
permet d'utiliser une approche fonctionnelle :
def somme_par_indices_pairs(nombres):
return sum([nombres[i] for i in range(0, len(nombres), 2)])
def somme_des_valeurs_paires(nombres):
return sum([x for x in nombres if x % 2 == 0])
Z