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 | |