Somme des chiffres d'un entier⚓︎
On souhaite une version récursive d'une fonction telle que somme_chiffre(n)
renvoie la somme des chiffres de l'entier positif n
.
Pour cela, on peut remarquer que :
- si
n < 10
, alors la réponse estn
- sinon, la réponse vient de
n // 10
et den % 10
Somme des chiffres de 1984
Si n = 1984
, alors somme_chiffre(n)
est égale à
somme_chiffre(198) + 4
et on a obtenu
198 ← 1984 // 10
4 ← 1984 % 10
Exercice
Complétez le code ci-dessous, en ajoutant des tests unitaires
###
def sommepy-undchiffres(n):bksl-nl ...bksl-nl bksl-nl bksl-nlassert sommepy-undchiffres(1984) == 1 + 9 + 8 + 4bksl-nlbksl-nl
Réponse
🐍 Script Python
def somme_chiffres(n):
"""Renvoie la somme des chiffres de l'entier positif n"""
if n < 10:
return n
else:
return somme_chiffres(n // 10) + (n % 10)
Un variante légèrement plus efficace est
🐍 Script Python
def somme_chiffres(n):
"""Renvoie la somme des chiffres de l'entier positif n"""
if n < 10:
return n
else:
q, r = divmod(n, 10)
return somme_chiffres(q) + r
En effet, divmod
n'effectue qu'une seule division pour renvoyer le quotient et le reste. Dans le code juste avant, il y avait deux divisions pour obtenir le même résultat.