Exercices de programmation en Python
Exercices de programmation en Python
1. Écrire une fonction question_01(n:int) -> None qui affiche les nombres de 1 à 𝑛
en utilisant une boucle for.
2. Écrire une fonction question_02(n:int) -> None qui affiche tous les nombres
pairs de 1 à 𝑛 .
3. Écrire une fonction question_03(n:int) -> None qui affiche les carrés des nombres
de 1 à 𝑛 .
4. Écrire une fonction question_04(fruits:[str]) -> None qui affiche un élément
d’une liste de fruits ['pomme', 'banane', 'orange', 'raisin'] par ligne.
5. Écrire une fonction question_05(n:int) -> int qui calcule et affiche la somme
des nombres de 1 à n.
6. Écrire une fonction question_06(mot:str) -> None qui énumère les lettres du
mot en utilisant une boucle for.
7. Écrire une fonction question_07(L:[int]) -> [int] qui prend une liste de
nombres et renvoie une liste ou chaque nombre est multiplié par 2.
8. Écrire une fonction question_08(noms:[str]) -> [str] qui prend une liste de
noms et renvoie une autre liste de noms où chacun commence par une lettre
capitale1 . 1: [Link]() permet de mettre
9. Créer une fonction question_09(n:int) -> None qui affiche les 𝑛 premiers mul- la première lettre de la chaîne ch en capi-
tale.
tiples de 3.
10. Écrire une fonction question_10(n:int) -> None qui affiche les nombres de 𝑛 à 1
dans l’ordre décroissant.
11. Écrire une fonction question_11(n:int) -> None qui affiche la table de multipli-
cation de 𝑛 (de 1 à 10).
12. Écrire une fonction question_12(n:int) -> None qui affiche les n premiers nombres
impairs, où n est l’entier donné.
13. Écrire une fonction question_13(phrase:str) -> None qui prend une phrase en
argument et affiche un mot par ligne.
14. Écrire une fonction question_14(chaine:str) -> None qui prend une chaîne de
caractères en argument et qui affiche chaque caractère de la chaîne individuelle-
ment.
15. Écrire une fonction question_15(phrase:str) -> int qui utilise une boucle for
pour compter le nombre de voyelles dans une phrase donnée.
2
16. Créer une fonction question_16(n:int) -> int qui utilise une boucle for pour
calculer la factorielle d’un nombre donné par l’utilisateur.
17. Écrire une fonction question_17(L:[int]) -> float qui prend une liste de notes
(entiers) et calcule la moyenne de ces notes en utilisant une boucle for.
18. Créer une fonction question_18(n:int) -> None qui prend en argument un
nombre et affiche les diviseurs de ce nombre.
19. Écrire une fonction question_19(n:int) -> None qui affiche les nombres de 1 à n,
mais pour les multiples de 3 affiche "Fizz", pour les multiples de 5 affiche "Buzz",
et pour les multiples de 3 et 5 affiche "FizzBuzz".
20. Écrire une fonction question_20(n:int) -> None qui affiche les nombres de la
suite de Fibonacci jusqu’au ne terme.
0.1.2 Niveau 2
1. Écrivez un programme qui prend une liste de mots et affiche le mot le plus long
de cette liste. Utilisez une boucle for pour parcourir la liste.
2. Écrivez un programme qui affiche les nombres premiers de 1 à 100. Utilisez une
boucle for imbriquée pour vérifier si chaque nombre est divisible uniquement
par 1 et par lui-même.
3. Créez un programme qui prend un mot et vérifie s’il est un palindrome (mot qui
se lit de la même manière à l’envers). Utilisez une boucle for pour comparer les
caractères.
4. Écrivez un programme qui calcule le produit scalaire de deux listes d’entiers de
même longueur. Par exemple, si A = [1, 2, 3] et B = [4, 5, 6], le produit
scalaire est 1*4 + 2*5 + 3*6 = 32.
5. Créez un programme qui génère une pyramide de nombres. Par exemple, si
l’utilisateur entre 4, le programme doit afficher :
1
22
333
4444
6. Écrivez un programme qui utilise une boucle for pour trier une liste d’entiers
en utilisant l’algorithme de tri par sélection. Ne pas utiliser de fonctions de tri
intégrées.
7. Créez un programme qui prend une liste de phrases et affiche les mots de
chaque phrase qui contiennent exactement 5 lettres. Utilisez une boucle for
pour parcourir chaque mot.
8. Écrivez un programme qui utilise une boucle for pour compter le nombre de
fois où chaque lettre apparaît dans une phrase donnée. Affichez le résultat sous
forme de dictionnaire où chaque lettre est une clé.
9. Créez un programme qui prend une liste de listes (par exemple [[1, 2], [3,
4], [5, 6]]) et calcule la somme de tous les éléments. Utilisez des boucles for
imbriquées pour parcourir la liste principale et les sous-listes.
10. Écrivez un programme qui génère les n premiers termes de la séquence de
Fibonacci et les stocke dans une liste. Utilisez une boucle for pour générer les
termes et afficher la liste finale.
Xavier Pessoles
Informatique – PTSI
0.1 Exercices boucle for 3
0.1.3 Niveau 3
1. Créez un programme qui prend une liste de mots et détermine, pour chaque
mot, si celui-ci est un palindrome. Le programme doit afficher les mots qui sont
des palindromes.
2. Écrivez un programme qui calcule la somme de tous les nombres premiers infé-
rieurs à un nombre donné par l’utilisateur. Utilisez des boucles for imbriquées
pour vérifier si chaque nombre est premier.
3. Créez un programme qui prend deux chaînes de caractères et trouve les lettres
communes entre les deux chaînes, sans répétition. Utilisez une boucle for pour
comparer les lettres et construisez le résultat dans une liste ou une chaîne.
4. Écrivez un programme qui génère la suite de Collatz pour un nombre donné.
La suite de Collatz est définie par : si le nombre est pair, le diviser par 2 ; s’il est
impair, le multiplier par 3 et ajouter 1. La suite continue jusqu’à ce que le nombre
atteigne 1.
5. Créez un programme qui prend une liste de listes représentant une matrice
carrée et calcule la somme des éléments au-dessus de la diagonale principale.
6. Écrivez un programme qui génère les premiers n nombres de la suite de Lucas,
une variante de la suite de Fibonacci avec les termes initiaux 2 et 1.
7. Créez un programme qui prend une phrase et affiche chaque mot avec ses lettres
en ordre alphabétique. Par exemple, pour "bonjour tout le monde", le programme
devrait retourner "bjnoru ottu el ddmeno".
8. Écrivez un programme qui trouve tous les nombres parfaits inférieurs à un
nombre donné. Un nombre parfait est un nombre égal à la somme de ses diviseurs
propres (comme 6, qui est 1 + 2 + 3).
9. Créez un programme qui prend une liste de nombres et calcule le produit de
tous les éléments pairs, tout en additionnant les éléments impairs. Affichez le
produit des pairs et la somme des impairs.
10. Écrivez un programme qui génère les n premières lignes du triangle de Pascal et
les affiche sous forme de liste de listes. Utilisez une boucle for pour construire
chaque ligne.
0.1.4 Niveau 4
Xavier Pessoles
Informatique – PTSI
4
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
0.2.1 Niveau 1
1. Exercice 1
Utilisez une boucle while pour afficher les nombres de 1 à 10.
2. Exercice 2
Créez une boucle while qui affiche les nombres pairs de 2 à 20.
3. Exercice 3
Utilisez une boucle while pour afficher les multiples de 3, de 3 à 30 inclus.
4. Exercice 4
Écrivez une boucle while qui affiche tous les nombres de 10 à 1, dans l’ordre
décroissant.
5. Exercice 5
Utilisez une boucle while pour calculer et afficher la somme des nombres de 1 à
50.
6. Exercice 6
Utilisez une boucle while pour calculer et afficher la somme des nombres pairs
entre 1 et 100.
7. Exercice 7
Écrivez une boucle while pour calculer et afficher le produit des nombres de 1 à
10.
8. Exercice 8
Créez une boucle while qui calcule la puissance de 2, de 21 à 210 , et affiche
chaque résultat.
Xavier Pessoles
Informatique – PTSI
0.2 Exercices boucle while 5
9. Exercice 9
Utilisez une boucle while pour afficher la suite de Fibonacci, jusqu’au 10ème
terme.
10. Exercice 10
Utilisez une boucle while pour afficher les nombres de 1 à 100. Si un nombre est
multiple de 3, affichez Fizz à la place, et si un nombre est multiple de 5, affichez
Buzz. Si un nombre est multiple de 3 et de 5, affichez FizzBuzz.
0.2.2 Niveau 2
Xavier Pessoles
Informatique – PTSI
6
boucle while pour inverser le mot. Le programme doit ensuite indiquer si le mot
est un palindrome (un mot qui se lit de la même manière dans les deux sens).
0.2.3 Niveau 3
1. Nombre parfait
Un nombre parfait est un entier positif égal à la somme de ses diviseurs
positifs propres (autres que lui-même). Par exemple, 6 est un nombre parfait car
6 = 1 + 2 + 3. Écrivez un programme qui demande un entier positif 𝑛 et utilise
une boucle while pour déterminer si 𝑛 est un nombre parfait.
2. Trouver les nombres premiers inférieurs à 𝑛
Demandez à l’utilisateur un nombre entier positif 𝑛 . Écrivez un programme qui
utilise une boucle while pour afficher tous les nombres premiers inférieurs à
𝑛 . Assurez-vous d’optimiser le programme pour réduire le nombre de calculs
nécessaires.
3. Approximation de 𝜋
Écrire un programme qui utilise une boucle while pour approximer la valeur de
𝜋 en utilisant la série de Leibniz :
1 1 1
𝜋 = 4 1− + − +...
3 5 7
Xavier Pessoles
Informatique – PTSI
0.3 Exercices sur les list 7
Utilisez une boucle while pour vérifier si la suite entre dans un cycle. Affichez le
cycle trouvé.
0.3.1 Niveau 1
Xavier Pessoles
Informatique – PTSI
8
0.3.2 Niveau 2
Xavier Pessoles
Informatique – PTSI
0.3 Exercices sur les list 9
0.3.3 Niveau 3
Xavier Pessoles
Informatique – PTSI
10
3. Multiplication cumulée
Écrivez un programme qui prend une liste de nombres et crée une nouvelle liste
où chaque élément est le produit cumulatif de tous les éléments précédents, sans
utiliser de boucles imbriquées. Par exemple, pour la liste [1, 2, 3, 4], la sortie
doit être [1, 1, 2, 6].
4. Trouver tous les triplets qui forment une somme nulle
Écrivez un programme qui demande une liste de nombres et trouve tous les
triplets uniques de nombres dans la liste dont la somme est égale à zéro. Assurez-
vous que les triplets sont uniques, même si les nombres sont répétés dans la
liste.
5. Remplir la liste des valeurs manquantes pour en faire une liste consécutive
Écrivez un programme qui prend une liste de nombres non triés et la remplit
avec les nombres manquants pour qu’elle devienne une séquence consécutive,
de manière croissante, sans changer l’ordre des autres éléments.
6. Évaluation d’expressions en notation polonaise inverse (RPN)
Écrivez un programme qui prend en entrée une expression mathématique en
notation polonaise inverse (Reverse Polish Notation) sous forme de liste, puis
l’évalue et retourne le résultat. Par exemple, pour l’entrée [2, 1, "+", 3, "*"],
la sortie doit être 9.
7. Liste des carrés sans duplications
Écrivez un programme qui prend une liste de nombres et renvoie une nouvelle
liste contenant les carrés des nombres de la liste d’origine, sans doublons. Par
exemple, pour l’entrée [1, -1, 2, -2, 3], la sortie doit être [1, 4, 9].
8. Détecter une sous-liste palindrome
Écrivez un programme qui prend une liste et détermine si elle contient une
sous-liste continue qui est un palindrome. Par exemple, la liste [3, 5, 6, 7, 6,
5, 3] contient une sous-liste palindrome.
9. Équilibrer la somme des sous-listes
Écrivez un programme qui prend une liste et trouve un indice où la somme des
éléments de gauche est égale à la somme des éléments de droite. Si cet indice
n’existe pas, retournez -1.
10. Intercaler deux listes
Écrivez un programme qui prend deux listes de longueurs différentes et crée
une nouvelle liste qui intercale leurs éléments. Si une des listes est plus longue,
placez les éléments restants de cette liste à la fin.
0.4.1 Niveau 1
Xavier Pessoles
Informatique – PTSI
0.4 Exercices sur la récursivité 11
Xavier Pessoles
Informatique – PTSI
12
0.4.2 Niveau 2
Xavier Pessoles
Informatique – PTSI
0.4 Exercices sur la récursivité 13
Écrivez une fonction récursive inverser_pile(pile) qui prend une pile repré-
sentée sous forme de liste et la renverse en utilisant uniquement des appels
récursifs.
17. Trouver le plus grand nombre dans une liste de listes imbriquées
Écrivez une fonction récursive maximum_imbrique(lst) qui retourne le plus
grand nombre dans une liste contenant des sous-listes imbriquées.
18. Compresser une chaîne de caractères en supprimant les doublons consécutifs
Écrivez une fonction récursive compresser(chaine) qui retourne une nouvelle
chaîne en supprimant les doublons consécutifs de la chaîne d’entrée.
19. Vérifier si une liste contient une séquence cible
Écrivez une fonction récursive contient_sequence(lst, sequence) qui vérifie
si une liste lst contient une séquence spécifique de valeurs.
20. Fusionner deux listes triées en une seule liste triée
Écrivez une fonction récursive fusion_listes(lst1, lst2) qui fusionne deux
listes triées en une seule liste triée.
1 # Exercice 1 : Calculer le nombre de façons d'obtenir une somme avec des dés
2 def combinaisons_des(somme, des):
3 if somme < 0:
4 return 0
5 if somme == 0:
6 return 1
7 if des == 0:
8 return 0
9 return combinaisons_des(somme - 1, des - 1) + combinaisons_des(somme - 6,
des - 1)
10
11 # Exercice 2 : Lister tous les sous-ensembles d'un ensemble
12 def sous_ensembles(ensemble):
13 if not ensemble:
14 return [[]]
15 sous_ens = sous_ensembles(ensemble[1:])
16 return sous_ens + [[ensemble[0]] + sous for sous in sous_ens]
17
18 # Exercice 3 : Calculer la puissance de deux en utilisant uniquement la ré
cursivité
19 def puissance_de_deux(n):
20 if n == 0:
21 return 1
22 return 2 * puissance_de_deux(n - 1)
23
24 # Exercice 4 : Vérifier l'équilibre des parenthèses
25 def equilibre_parentheses(chaine, count=0):
26 if count < 0:
27 return False
28 if not chaine:
29 return count == 0
30 if chaine[0] == '(':
31 return equilibre_parentheses(chaine[1:], count + 1)
32 elif chaine[0] == ')':
33 return equilibre_parentheses(chaine[1:], count - 1)
34 return equilibre_parentheses(chaine[1:], count)
35
36 # Exercice 5 : Trouver la profondeur maximale d'une liste imbriquée
37 def profondeur_maximale(lst):
38 if not isinstance(lst, list):
39 return 0
Xavier Pessoles
Informatique – PTSI
14
Xavier Pessoles
Informatique – PTSI
0.4 Exercices sur la récursivité 15
94 for i in range(len(chaine)):
95 for p in permutations(chaine[:i] + chaine[i+1:]):
96 [Link](chaine[i] + p)
97 return perm
98
99 # Exercice 14 : Calculer la somme des éléments d'une liste imbriquée, en
doublant la profondeur
100 def somme_profondeur(lst, profondeur=1):
101 total = 0
102 for el in lst:
103 if isinstance(el, list):
104 total += somme_profondeur(el, profondeur + 1)
105 else:
106 total += el * profondeur
107 return total
108
109 # Exercice 15 : Vérifier si deux chaînes sont des anagrammes
110 def est_anagramme(chaine1, chaine2):
111 if sorted(chaine1) == sorted(chaine2):
112 return True
113 return False
114
115 # Exercice 16 : Inverser une pile en utilisant la récursivité
116 def inverser_pile(pile):
117 if not pile:
118 return []
119 val = [Link]()
120 res = inverser_pile(pile)
121 [Link](0, val)
122 return res
123
124 # Exercice 17 : Trouver le plus grand nombre dans une liste de listes imbriqué
es
125 def maximum_imbrique(lst):
126 max_val = float('-inf')
127 for el in lst:
128 if isinstance(el, list):
129 max_val = max(max_val, maximum_imbrique(el))
130 else:
131 max_val = max(max_val, el)
132 return max_val
133
134 # Exercice 18 : Compresser une chaîne de caractères en supprimant les doublons
consécutifs
135 def compresser(chaine):
136 if not chaine:
137 return ""
138 if len(chaine) == 1:
139 return chaine
140 if chaine[0] == chaine[1]:
141 return compresser(chaine[1:])
142 return chaine[0] + compresser(chaine[1:])
143
144 # Exercice 19 : Vérifier si une liste contient une séquence cible
145 def contient_sequence(lst, sequence):
146 if not sequence:
147 return True
148 if not lst:
Xavier Pessoles
Informatique – PTSI
16
0.4.3 Niveau 3
Xavier Pessoles
Informatique – PTSI
0.4 Exercices sur la récursivité 17
qui trouve tous les chemins uniques possibles dans un labyrinthe représenté par
une matrice. Les cases valides sont indiquées par 1 et les obstacles par 0.
10. Résoudre un Sudoku partiellement rempli
Écrivez une fonction récursive resoudre_sudoku(grille) qui résout un Sudoku
partiellement rempli, représenté par une grille 9 × 9. Utilisez une approche de
backtracking pour remplir chaque case vide avec les nombres de 1 à 9.
Xavier Pessoles
Informatique – PTSI
18
50
51 # Exercice 6 : Compresser une liste de chaînes par fréquence
52 def compresser_frequence(lst, index=0, resultat=None):
53 if resultat is None:
54 resultat = []
55 if index >= len(lst):
56 return resultat
57 count = 1
58 while index + count < len(lst) and lst[index] == lst[index + count]:
59 count += 1
60 [Link](f"{lst[index]}:{count}")
61 return compresser_frequence(lst, index + count, resultat)
62
63 # Exercice 7 : Résoudre le problème de la somme de sous-ensemble
64 def somme_sous_ensemble(lst, cible, index=0):
65 if cible == 0:
66 return True
67 if index >= len(lst) or cible < 0:
68 return False
69 return somme_sous_ensemble(lst, cible - lst[index], index + 1) or
somme_sous_ensemble(lst, cible, index + 1)
70
71 # Exercice 8 : Calculer le produit cartésien de plusieurs listes
72 def produit_cartesien(liste_de_listes, index=0, courant=[]):
73 if index == len(liste_de_listes):
74 print(tuple(courant))
75 return
76 for element in liste_de_listes[index]:
77 produit_cartesien(liste_de_listes, index + 1, courant + [element])
78
79 # Exercice 9 : Trouver tous les chemins uniques dans un labyrinthe
80 def chemins_labyrinthe(labyrinthe, x, y, chemin=[]):
81 if x >= len(labyrinthe) or y >= len(labyrinthe[0]) or labyrinthe[x][y] ==
0:
82 return
83 if (x, y) == (len(labyrinthe) - 1, len(labyrinthe[0]) - 1):
84 print(chemin + [(x, y)])
85 return
86 labyrinthe[x][y] = 0 # marquer comme visité
87 chemins_labyrinthe(labyrinthe, x + 1, y, chemin + [(x, y)])
88 chemins_labyrinthe(labyrinthe, x, y + 1, chemin + [(x, y)])
89 labyrinthe[x][y] = 1 # annuler la visite
90
91 # Exercice 10 : Résoudre un Sudoku partiellement rempli
92 def est_valide(grille, ligne, col, num):
93 for i in range(9):
94 if grille[ligne][i] == num or grille[i][col] == num:
95 return False
96 bloc_x, bloc_y = 3 * (ligne // 3), 3 * (col // 3)
97 for i in range(3):
98 for j in range(3):
99 if grille[bloc_x + i][bloc_y + j] == num:
100 return False
101 return True
102
103 def resoudre_sudoku(grille):
104 for i in range(9):
105 for j in range(9):
Xavier Pessoles
Informatique – PTSI
0.4 Exercices sur la récursivité 19
106 if grille[i][j] == 0:
107 for num in range(1, 10):
108 if est_valide(grille, i, j, num):
109 grille[i][j] = num
110 if resoudre_sudoku(grille):
111 return True
112 grille[i][j] = 0
113 return False
114 return True
Xavier Pessoles
Informatique – PTSI