Somme des carrés des chiffres☘
Liste des chiffres☘
Ecrire un corps pour la fonction suivante:
def listeChiffres(n):
"""
n -- entier naturel
renvoie la liste des chiffres de l'écriture décimale de n
>>> listeChiffres(10)
[0, 1]
>>> listeChiffres(234)
[4, 3, 2]
"""
Solution
On utilise évidemment la méthode des divisions en cascade:
def listeChiffres(n):
"""
n -- entier naturel
renvoie la liste des chiffres de l'écriture décimale de n
>>> listeChiffres(10)
[0, 1]
>>> listeChiffres(234)
[4, 3, 2]
"""
if n == 0: return [0]
resultat = []
while n!=0:
resultat.append(n%10)
n = n//10
return resultat
Somme des carrés des chiffres☘
Ecrire un corps pour la fonction suivante:
def sommeCarreChiffre(n):
"""
n -- entier naturel
renvoie la somme des carrés des chiffres de l'écriture décimale de n
>>> sommeCarreChiffre(12)
5
"""
Solution
On fait appel à la fonction précédente:
def sommeCarreChiffre(n):
"""
n -- entier naturel
renvoie la somme des carrés des chiffres de l'écriture décimale de n
>>> sommeCarreChiffre(12)
5
"""
s = 0
for c in listeChiffres(n):
s += c*c
return s
Liste des sommes des carrés des chiffres☘
On part d'un entier n, on calcule la somme s_1 des carrés des chiffres de n (écriture décimale), puis on calcule s_2 la somme des carrés des chiffres de s_1, puis on calcule s_3 la somme des carrés des chiffres de s_2, ... et ainsi de suite. On stocke toutes ces valeurs successives dans une liste. On stoppe le calcul de la liste soit lorsqu'elle a atteint une longueur donnée à l'avance soit lorsque la somme des carrés obtenue a déjà été obtenue auparavant.
def listeSommeCarres(n, stop):
"""
n -- entier naturel
stop -- entier naturel (longueur maximale de la liste donnée en sortie)
renvoie la liste définie ci-dessus.
>>> listeSommeCarres(12, 100)
[5, 25, 29, 85, 89, 145, 42, 20, 4, 16, 37, 58]
"""
Pour l'exemple donné, le calcul de la liste est stoppé bien avant la longueur 100 car la prochaine somme est 5^2+8^2 = 89 et ce résultat 89 est déjà présent dans la liste.
Solution
def listeSommeCarres(n, stop):
"""
n -- entier naturel
stop -- entier naturel (longueur maximale de la liste donnée en sortie)
renvoie la liste définie ci-dessus.
>>> listeSommeCarres(12, 100)
[5, 25, 29, 85, 89, 145, 42, 20, 4, 16, 37, 58]
"""
resultat = []
s = sommeCarreChiffre(n)
while s not in resultat and len(resultat) < stop:
resultat.append(s)
s = sommeCarreChiffre(s)
return resultat