Programmation impérative en Python — Travaux dirigés
Séance 2 : Boucles while et récursions
L1 – Université Côte d’Azur
Exercice 1 — Factorielles (⋆)
Écrivez une fonction fact(n) qui renvoie 𝑛!, la factorielle de 𝑛 :
1. en utilisant une récurrence ;
2. en utilisant une boucle while.
Exercice 2 — Affichage de factorielles (⋆)
1. Écrivez une fonction affiche_facts(n) qui affiche sur 𝑛 lignes les entiers 1!, 2!, 3!, …, 𝑛!.
2. Si vous avez utilisé la fonction fact(n) précédente, combien de multiplications sont effectuées par votre code
lorsque vous exécutez affiche_facts(n) ?
3. Proposez une solution utilisant moins de multiplications.
Exercice 3 — Logarithme entier (⋆)
Soit 𝑛 un entier positif. On appelle logarithme entier de 𝑛 l’entier le(n) correspondant au nombre de fois où il faut
diviser 𝑛 par deux avant d’atteindre 1 ou 0. Par exemple, le(5) = 1 + le(2) = 1 + (1 + le(1)) = 2. Écrivez une fonction
le(n) qui renvoie le logarithme entier de n.
Exercice 4 — Partie entière de la racine carrée (⋆)
Soit 𝑛 un entier positif. La partie entière de la racine carrée de 𝑛, notée ⌊√𝑛⌋, est le plus grand entier 𝑘 tel que 𝑘 2 ≤ 𝑛.
Écrivez une fonction int_sqrt(n) qui renvoie la partie entière de la racine carrée de n.
Complément sur la fonction print
Par défaut, la fonction print affiche un caractère espace entre chacun de ses arguments et termine en allant à la ligne
à la fin. Deux paramètres optionnels de la fonction print permettent de modifier ce comportement par défaut : sep et
end. Par exemple, le programme
1 print('Comportement','par','defaut.',sep=' ',end='\n')
2 print('Sur','une','seule','ligne','avec','des','tirets',sep='-',end='')
3 print('.\n','Nouvelle ligne','.')
affiche
1 Comportement par defaut.
2 Sur-une-seule-ligne-avec-des-tirets.
3 Nouvelle ligne .
Le caractère '\n' est un caractère de contrôle qui lorsqu’il est affiché provoque un passage à la ligne. Dans la deuxième
instruction print, on a remplacé le caractère de fin '\n' par '' : print ne va pas à la ligne.
1/2
Programmation impérative en Python TD 2 L1 — Université Côte d’Azur
Complément sur les chaînes de caractères
On peut convertir un entier en chaîne de caractères : str(42) == '42'. Réciproquement, on peut convertir une chaîne
de caractères en entier : int('42') == 42. Pour concaténer deux chaînes de caractères, on utilise l’opérateur +. On a
par exemple 'caram' + 'bolage' == 'carambolage' ; ce + n’a rien à voir avec l’addition sur les entiers : '2' +
'3' vaut '23', mais pas '3' + '2'.
Exercice 5 — Écriture binaire (⋆⋆– ⋆ ⋆ ⋆)
1. Écrivez une fonction affiche_calcul_binaire(n) qui affiche le calcul de la représentation binaire de n, de sorte
que l’on peut lire verticalement la représentation en binaire de 𝑛. Par exemple, pour 13 = (1101)2 , on obtiendra
dans le Shell :
1 >>> affiche_calcul_binaire(13)
2 1 ( 13 = 2 × 6 + 1 )
3 0 ( 6 = 2 × 3 + 0 )
4 1 ( 3 = 2 × 1 + 1 )
5 1
2. Écrivez une fonction récursive affiche_binaire(n) qui affiche l’écriture binaire de 𝑛 dans le sens de lecture
usuel. Par exemple, on doit obtenir :
1 >>> affiche_binaire(13)
2 1101
3. Écrivez cette fonction en utilisant une boucle while.
Exercice 6 — Décomposition en facteurs premiers (⋆ ⋆ ⋆)
Écrivez une fonction affiche_facteurs(n) qui affiche la liste des facteurs premiers avec multiplicité de n. Par exemple,
affiche_facteurs(1176) affichera
1 >>> affiche_facteurs(1176)
2 2**3 3**1 7**2
Astuce : on pourra définir des sous-fonctions pour rendre le programme plus lisible.
2/2