Exercices d'entraînement☘
Ces exercices doivent être utilisés pour vous entraîner à programmer. Ils sont généralement accompagnés d'aide et de leur solution pour vous permettre de progresser.
Avant de vous précipiter sur ces solutions dès la première difficulté, n'oubliez pas les conseils suivants :
- Avez-vous bien fait un schéma au brouillon pour visualiser le problème posé ?
- Avez-vous essayé de rédiger un algorithme en français, avec vos propres mots, avant de vous lancer dans la programmation sur machine ?
- Avez-vous utilisé des affichages intermédiaires, des
print()
, pour visualiser au fur et à mesure le contenu des variables ? - Avez-vous testé le programme avec les propositions de tests donnés dans l'exercice ?
- Avez-vous testé le programme avec de nouveaux tests, différents de ceux proposés ?
Rappels
- Chaque programme Python doit être sauvegardé sous forme de fichier texte avec l'extension
.py
.
Enregistrez ce fichier dans le dossier[B05-Tableaux_de_Tableaux]
avec le nom donné à l'exercice :ProgB05.52.py
,ProgB05.53.py
, etc... - Pour exécuter ce programme, il suffit de le sauvegarder puis d'appuyer sur la touche
[F5]
. - Le programme principal doit contenir un appel au module
doctest
:##----- Programme principal et tests -----## if __name__ == '__main__': import doctest doctest.testmod()
Exercice B05.51☘
On définit par extension une matrice nommée B
:
1 2 3 4 5 |
|
Proposez une définition par compréhension de B
.
Une solution
Chaque tableau interne est de la forme [i**j for i in range(5)]
pour la
variable j
allant de 1
à 5
.
D'où la définition équivalente de B
:
1 |
|
ProgB05.52☘
Complétez la définition de la fonction matrice_entiers_successifs()
qui
renvoie une matrice carrée de n
lignes et n
colonnes contenant les
entiers de 0
à n²-1
. De façon plus générale :
- la ligne 0 est constituée des entiers de
0
àn-1
, - la ligne 1 des entiers de
n
à2n-1
, - la ligne 2 des entiers de
2n
à3n-1
, - ...
1 2 3 4 5 6 7 |
|
Exemple de tests
>>> A = matrice_entiers_successifs(3)
>>> affichage_matrice(A)
[0, 1, 2]
[3, 4, 5]
[6, 7, 8]
>>> B = matrice_entiers_successifs(4)
>>> affichage_matrice(B)
[0, 1, 2, 3]
[4, 5, 6, 7]
[8, 9, 10, 11]
[12, 13, 14, 15]
Une solution élément par élément
Dans cette solution, on se sert d'un compteur initialisé à 0
, on place
ce compteur dans la matrice puis on l'incrémente de 1
afin de placer
l'élément suivant dans le tableau, etc...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Une solution par compréhension
Regardons la colonne 1. Elle contient les éléments : 0
, n
, 2n
,
3n
, ...
En résumé la colonne 1 contient les entiers i\times n où i est le
numéro de ligne.
Sur la ligne i
, se trouvent donc les éléments i*n
, i*n+1
, i*n+2
,
..., i*n + (n-1)
. En bref, à l'intersection de la ligne i
et de la
colonne j
, on trouve l'élément i*n+j
.
D'où le code :
1 2 3 4 5 6 7 8 |
|
ProgB05.53☘
On considère la matrice B
:
1 |
|
Comme tous les éléments de cette matrice n'ont pas le même nombre de
caractères, l'affichage produit par la fonction affichage_matrice()
n'est pasforcément très lisible. On aimerait un affichage sans crochets,
sans virgules mais avec tabulations :
1 2 3 4 5 |
|
Complétez la définition de la fonction affichage_tabulation()
qui permet
de réaliser ce type d'affichage pour un paramètre de type
« tableau de tableaux ».
1 2 3 4 5 6 |
|
Exemple de tests
>>> A = [ [1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> affichage_tabulation(A)
1 2 3
4 5 6
7 8 9
>>> B = [ [i**j for i in range(5)] for j in range(1, 6)]
>>> affichage_tabulation(B)
0 1 2 3 4
0 1 4 9 16
0 1 8 27 64
0 1 16 81 256
0 1 32 243 1024
Une piste : aligner les affichages
Par défaut, la fonction print()
réalise un passage à la ligne après
l'affichage demandé.
Il est possible de changer ce comportement par défaut en ajoutant une valeur
au paramètre end
.
Testez par exemple ces instructions dans un programme puis exécutez-les :
1 2 3 4 5 6 7 |
|
Vous obtenez :
abcdef ghi
abc def
ghi
La valeur par défaut de end
est '\n'
, ce qui explique le passage à
la ligne de l'affichage lorsqu'on ne renseigne pas explicitement end
.
Le caractère '\t'
correspond à la tabulation (généralement visualisée
par 4 espaces).
Une solution
1 2 3 4 5 6 7 8 9 10 |
|