Exercices d'entraînement☘
Ces exercices doivent être utilisés pour vous entraîner à programmer. Ils sont généralement accompagnés de pistes 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ées 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[G02_Algo_Tableaux]
avec le nom donné à l'exercice :ProgG02.51.py
,ProgG02.52.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()
ProgG02.51☘
-
Copiez/collez et complétez le corps de la fonction
decale_gauche_jusqu_a()
en respectant ses spécifications.1 2 3 4 5 6 7 8 9 10 11
def decale_gauche_jusqu_a(tab, k): """ tab – list, tableau d'éléments k – int, entier compris entre 0 et len(tab)-1 Sortie: None – Permute à gauche tous les éléments de tab[0..k] (fonction à effet de bord) >>> tab = [3, 1, 7, 4] >>> decale_gauche_jusqu_a(tab, 2) >>> tab [1, 7, 3, 4] """
Attention
Les appels suivants doivent générer des erreurs :
>>> decale_gauche_jusqu_a([], 5) AssertionError: Le tableau est vide >>> decale_gauche_jusqu_a([3, 1, 7, 4], 5) AssertionError: tab index out of range
Une solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
def decale_gauche_jusqu_a(tab, k): """ tab – list, tableau d'éléments k – int, entier compris entre 0 et len(tab)-1 Sortie: None – Permute à gauche tous les éléments de tab[0..k] (fonction à effet de bord) >>> tab = [3, 1, 7, 4] >>> decale_gauche_jusqu_a(tab, 2) >>> tab [1, 7, 3, 4] """ assert tab != [], "Le tableau est vide" assert 0 <= k < len(tab), "tab index out of range" temp = tab[0] for i in range(k): tab[i] = tab[i+1] tab[k] = temp
-
Copiez/collez et complétez le corps de la fonction
decale_gauche_a_partir()
en respectant ses spécifications.1 2 3 4 5 6 7 8 9 10 11
def decale_gauche_a_partir(tab, k): """ tab – list, tableau d'éléments k – int, entier compris entre 0 et len(tab)-1 Sortie: None – Permute à gauche tous les éléments de tab[k..] (fonction à effet de bord) >>> tab = [3, 1, 7, 4] >>> decale_gauche_a_partir(tab, 1) >>> tab [3, 7, 4, 1] """
Attention
Les appels suivants doivent générer des erreurs :
>>> decale_gauche_a_partir([], 5) AssertionError: Le tableau est vide >>> decale_gauche_a_partir([3, 1, 7, 4], 5) AssertionError: tab index out of range
Une solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
def decale_gauche_a_partir(tab, k): """ tab – list, tableau d'éléments k – int, entier compris entre 0 et len(tab)-1 Sortie: None – Permute à gauche tous les éléments de tab[k..] (fonction à effet de bord) >>> tab = [3, 1, 7, 4] >>> decale_gauche_a_partir(tab, 1) >>> tab [3, 7, 4, 1] """ assert tab != [], "Le tableau est vide" assert 0 <= k < len(tab), "tab index out of range" temp = tab[k] for i in range(k, len(tab)-1): tab[i] = tab[i+1] tab[len(tab)-1] = temp
ProgG02.52☘
-
Copiez/collez et complétez le corps de la fonction
decale_droite_jusqu_a()
en respectant ses spécifications.1 2 3 4 5 6 7 8 9 10 11
def decale_droite_jusqu_a(tab, k): """ tab – list, tableau d'éléments k – int, entier compris entre 0 et len(tab)-1 Sortie: None – Permute à droite tous les éléments de tab[0..k] (fonction à effet de bord) >>> tab = [3, 1, 7, 4] >>> decale_droite_jusqu_a(tab, 2) >>> tab [7, 3, 1, 4] """
Attention
Les appels suivants doivent générer des erreurs :
>>> decale_droite_jusqu_a([], 5) AssertionError: Le tableau est vide >>> decale_droite_jusqu_a([3, 1, 7, 4], 5) AssertionError: tab index out of range
Une solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
def decale_droite_jusqu_a(tab, k): """ tab – list, tableau d'éléments k – int, entier compris entre 0 et len(tab)-1 Sortie: None – Permute à droite tous les éléments de tab[0..k] (fonction à effet de bord) >>> tab = [3, 1, 7, 4] >>> decale_droite_jusqu_a(tab, 2) >>> tab [7, 3, 1, 4] """ assert tab != [], "Le tableau est vide" assert 0 <= k < len(tab), "tab index out of range" temp = tab[k] for i in range(k): tab[k-i] = tab[k-i-1] tab[0] = temp
-
Copiez/collez et complétez le corps de la fonction
decale_droite_a_partir()
en respectant ses spécifications.1 2 3 4 5 6 7 8 9 10 11
def decale_droite_a_partir(tab, k): """ tab – list, tableau d'éléments k – int, entier compris entre 0 et len(tab)-1 Sortie: None – Permute à droite tous les éléments de tab[k..] (fonction à effet de bord) >>> tab = [3, 1, 7, 4] >>> decale_droite_a_partir(tab, 1) >>> tab [3, 4, 1, 7] """
Attention
Les appels suivants doivent générer des erreurs :
>>> decale_droite_a_partir([], 5) AssertionError: Le tableau est vide >>> decale_droite_a_partir([3, 1, 7, 4], 5) AssertionError: tab index out of range
Une solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
def decale_droite_a_partir(tab, k): """ tab – list, tableau d'éléments k – int, entier compris entre 0 et len(tab)-1 Sortie: None – Permute à droite tous les éléments de tab[k..] (fonction à effet de bord) >>> tab = [3, 1, 7, 4] >>> decale_droite_a_partir(tab, 1) >>> tab [3, 4, 1, 7] """ assert tab != [], "Le tableau est vide" assert 0 <= k < len(tab), "tab index out of range" temp = tab[len(tab)-1] for i in range(len(tab)-1, k, -1): tab[i] = tab[i-1] tab[k] = temp
ProgG02.53☘
-
Copiez/collez et complétez le corps de la fonction
est_trie_jusqu_a()
en respectant ses spécifications.1 2 3 4 5 6 7 8 9 10 11 12 13
def est_trie_jusqu_a(tab, k): """ tab – list, tableau d'éléments comparables k – int, entier compris entre 0 et len(tab)-1 Sortie: bool – True si tab[0..k] est trié par ordre croissant, False sinon >>> est_trie_jusqu_a([2, 5, 6, 3, 4], 2) True >>> est_trie_jusqu_a([2, 5, 6, 3, 4], 3) False >>> est_trie_jusqu_a([2, 3, 4, 5, 6], 4) True """
Attention
L'appel suivant doit générer une erreurs :
>>> est_trie_jusqu_a([3, 1, 7, 4], 5) AssertionError: tab index out of range
Une solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
def est_trie_jusqu_a(tab, k): """ tab – list, tableau d'éléments comparables k – int, entier compris entre 0 et len(tab)-1 Sortie: bool – True si tab[0..k] est trié par ordre croissant, False sinon >>> est_trie_jusqu_a([2, 5, 6, 3, 4], 2) True >>> est_trie_jusqu_a([2, 5, 6, 3, 4], 3) False >>> est_trie_jusqu_a([2, 3, 4, 5, 6], 4) True """ assert 0 <= k < len(tab), "tab index out of range" for i in range(k): if tab[i] > tab[i+1]: return False return True
-
Copiez/collez et complétez le corps de la fonction
est_trie_a_partir()
en respectant ses spécifications.1 2 3 4 5 6 7 8 9 10 11 12 13
def est_trie_a_partir(tab, k): """ tab – list, tableau d'éléments comparables k – int, entier compris entre 0 et len(tab)-1 Sortie: bool – True si tab[k..] est trié par ordre croissant, False sinon >>> est_trie_a_partir([2, 5, 6, 3, 4], 2) False >>> est_trie_a_partir([2, 5, 6, 3, 4], 3) True >>> est_trie_a_partir([2, 3, 4, 5, 6], 4) True """
Attention
L'appel suivant doit générer une erreurs :
>>> est_trie_a_partir([3, 1, 7, 4], 5) AssertionError: tab index out of range
Une solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
def est_trie_a_partir(tab, k): """ tab – list, tableau d'éléments comparables k – int, entier compris entre 0 et len(tab)-1 Sortie: bool – True si tab[k..] est trié par ordre croissant, False sinon >>> est_trie_a_partir([2, 5, 6, 3, 4], 2) False >>> est_trie_a_partir([2, 5, 6, 3, 4], 3) True >>> est_trie_a_partir([2, 3, 4, 5, 6], 4) True """ assert 0 <= k < len(tab), "tab index out of range" for i in range(k, len(tab)-1): if tab[i] > tab[i+1]: return False return True