Chaînes de caractères
Chaque exercice est fourni avec un fichier Python à compléter et un énoncé « papier » distribué à l'élève et reproduit ci-dessous.
Remarques importantes
-
Les exercices de cette page ne sont pas classés par ordre de « difficulté », cette notion de difficulté étant subjective et dépendante de chaque élève.
-
Les solutions proposées ne sont que des propositions !
Il existe d'autres codes valables pour répondre à chaque problème que ceux proposés ici : il ne faut pas hésiter à les soumettre à votre enseignant pour qu'il vous donne son avis sur les idées mises en oeuvre.
Correspondance☘
On considère des mots à trous : ce sont des chaînes de caractères contenant
uniquement des majuscules et des caractères *
(étoile). Le caractère
*
remplace exactement une lettre majuscule.
Par exemple INFO*MA*IQUE
, ***I***E**
et *S*
sont des mots à trous.
Dans cet exercice, la fonction correspond()
doit :
-
prendre en paramètres deux chaînes de caractères de même longueur
mot
etmot_a_trous
oùmot_a_trous
est un mot à trous comme indiqué ci-dessus, -
renvoyer :
True
si on peut obtenirmot
en remplaçant convenablement les caractères'*'
demot_a_trous
.False
sinon.
Exemples
>>> correspond('INFORMATIQUE', 'INFO*MA*IQUE')
True
>>> correspond('AUTOMATIQUE', '*****M*****')
False
>>> correspond('PYTHON', 'JAV*S*R**T')
AssertionError: Les deux mots n'ont pas la même longueur
-
Compléter la définition de la fonction
correspond()
, sans oublier d'ajouter l'assertion signalée dans l'exemple précédent.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
def correspond(mot, mot_a_trous): """ mot, mot_a_trous - Sortie: >>> correspond('INFORMATIQUE', 'INFO*MA*IQUE') True >>> correspond('AUTOMATIQUE', '*****M*****') False """ pass if __name__ == '__main__': import doctest doctest.testmod()
-
Compléter le docstring de cette fonction.
- Ajouter au moins deux nouveaux tests avec affichage dans la partie principale
du programme (le
main
).
Une solution possible
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
Renverser☘
On considère une fonction renverse()
, prenant en paramètre une chaîne de
caractères non vide mot
et qui renvoie une chaîne de caractères en
inversant ceux de la chaîne mot
.
Exemples
>>> renverse("informatique")
'euqitamrofni'
>>> renverse('')
AssertionError: La chaîne est vide
-
Compléter la définition de la fonction
renverse()
, sans oublier d'ajouter l'assertion signalée dans l'exemple précédent.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
def renverse(mot): """ mot - Sortie: >>> renverse("informatique") 'euqitamrofni' """ pass if __name__ == '__main__': import doctest doctest.testmod()
-
Compléter le docstring de cette fonction.
- Ajouter au moins deux nouveaux tests avec affichage dans la partie principale
du programme (le
main
).
Une solution possible
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
Renverser doublement☘
On considère une fonction renverser()
qui prend en paramètre une chaîne de caractères formée uniquement des caractères 'D'
et 'G'
. Cette fonction renvoie une chaîne de caractères qui correspond à la chaîne passée en paramètre « doublement renversée », c’est-à-dire :
- chaque
'D'
est transformé en'G'
et vice-versa ; - le premier caractère est devenu le dernier, le deuxième est devenu l'avant-dernier, etc...
Exemples
>>> renverser('DDGD')
'GDGG'
>>> renverser('GDGGDDG')
'DGGDDGD'
>>> renverser('')
AssertionError: La chaîne est vide
-
Compléter la définition de la fonction
renverser()
, sans oublier d'ajouter l'assertion signalée dans l'exemple précédent.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
def renverser(chaine): """ chaine - Sortie: >>> renverser('DDGD') 'GDGG' >>> renverser('GDGGDDG') 'DGGDDGD' """ pass if __name__ == '__main__': import doctest doctest.testmod()
-
Compléter le docstring de cette fonction.
- Ajouter au moins deux nouveaux tests avec affichage dans la partie principale
du programme (le
main
).
Une solution possible
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
Nombre d'occurrences d'un caractère☘
Écrire une fonction nb_occurrences()
qui prend en paramètres
caractere
, un caractère, et mot
, une chaîne de caractères,
et qui renvoie le nombre d’occurrences de caractere
dans
mot
, c’est-à-dire le nombre de fois où caractere
apparaît dans mot
.
Exemples
>>> nb_occurrences('e', "sciences")
2
>>> nb_occurrences('i',"mississippi")
4
>>> nb_occurrences('a',"mississippi")
0
-
Compléter la définition de la fonction
nb_occurrences()
.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
def nb_occurrences(caractere, mot): """ caractere - mot - Sortie: >>> nb_occurrences('e', "sciences") 2 >>> nb_occurrences('i',"mississippi") 4 >>> nb_occurrences('a',"mississippi") 0 """ pass if __name__ == '__main__': import doctest doctest.testmod()
-
Compléter le docstring de cette fonction.
- Ajouter au moins deux nouveaux tests avec affichage dans la partie principale
du programme (le
main
).
Une solution possible
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
Nombre de mots☘
Pour cet exercice :
- On appelle « mot » une chaîne de caractères composée avec des caractères choisis parmi les 26 lettres minuscules ou majuscules de l'alphabet.
- On appelle « phrase » une chaîne de caractères composée avec un ou plusieurs
« mots » séparés entre eux par un seul caractère espace
' '
. - Une « phrase » se finit soit par un point
'.'
qui est alors collé au dernier mot, soit par un point d'exclamation'!'
ou d'interrogation'?'
qui est alors séparé du dernier mot par un seul caractère espace' '
.
Après avoir remarqué le lien entre le nombre de mots et le nombres de
caractères espace dans une phrase, programmer une fonction nombre_de_mots()
qui prend en paramètre une phrase et renvoie le nombre de mots présents dans
cette phrase.
Exemples
>>> nombre_de_mots('Le point d exclamation est separe !')
6
>>> nombre_de_mots('Il y a un seul espace entre les mots.')
9
-
Compléter la définition de la fonction
nombre_de_mots()
.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
def nombre_de_mots(phrase): """ phrase - Sortie: >>> nombre_de_mots('Le point d exclamation est separe !') 6 >>> nombre_de_mots('Il y a un seul espace entre les mots.') 9 """ pass if __name__ == '__main__': import doctest doctest.testmod()
-
Compléter le docstring de cette fonction.
- Ajouter au moins deux nouveaux tests avec affichage dans la partie principale
du programme (le
main
).
Une solution possible
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
Palindromes☘
Un mot palindrome peut se lire de la même façon de gauche à droite ou de droite à gauche : bob, radar, et non sont des mots palindromes.
De même certains nombres sont eux aussi des palindromes : 33, 121, 345543.
L’objectif de cet exercice est d’obtenir un programme Python permettant de tester si un nombre est un nombre palindrome.
Pour remplir cette tâche, on vous demande de compléter le code de trois fonctions :
-
La fonction
inverse_chaine()
inverse l'ordre des caractères d'une chaîne de caractèreschaine
passée en paramètre et renvoie la chaîne inversée. -
La fonction
est_palindrome()
teste si une chaine de caractèreschaine
est un palindrome. Elle renvoieTrue
si c’est le cas etFalse
sinon. -
La fonction
est_nbre_palindrome()
teste si un nombrenbre
est un palindrome. Elle renvoieTrue
si c’est le cas etFalse
sinon.
Exemples
>>> inverse_chaine('bac')
'cab'
>>> est_palindrome('NSI')
False
>>> est_palindrome('ISN-NSI')
True
>>> est_nbre_palindrome(214312)
False
>>> est_nbre_palindrome(213312)
True
-
Compléter la définition de ces fonctions.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
def inverse_chaine(chaine): """ chaine - Sortie: >>> inverse_chaine('bac') 'cab' """ pass def est_palindrome(chaine): """ chaine - Sortie: >>> est_palindrome('NSI') False >>> est_palindrome('ISN-NSI') True """ pass def est_nbre_palindrome(nbre): """ nbre - Sortie: >>> est_nbre_palindrome(214312) False >>> est_nbre_palindrome(213312) True """ pass if __name__ == '__main__': import doctest doctest.testmod()
-
Compléter les docstring de ces fonctions.
- Ajouter, pour chaque fonction, au moins un nouveau test avec affichage dans
la partie principale du programme (le
main
).
Une solution possible
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
|
Nombres narcissiques☘
On appelle nombre narcissique tout entier égal à la somme de ses p
chiffres chacun élevé à la puissance p
.
Exemples
- 153 est narcissique car il a 3 chiffres et 1^3 + 5^3 + 3^3 = 153.
- 8208 est narcissique car il a 4 chiffres et 8^4 + 2^4 + 0^4 + 8^4 = 8208.
L’objectif de cet exercice est d’obtenir un programme Python permettant de déterminer l'ensemble des nombres narcissiques jusqu'à un certain seuil.
Pour remplir cette tâche, on vous demande de compléter le code de deux fonctions :
-
La fonction
est_narcisse()
qui prend en paramètre un entiern
positif ou nul et qui renvoieTrue
lorsquen
est narcissique etFalse
sinon. -
La fonction
narcisses_jusqu_a()
qui prend en paramètre un entierN
positif ou nul et qui renvoie une chaîne de caractères constituée de l'ensemble des entiers narcissiques compris entre0
etN
séparés par des espaces.
Exemples
>>> est_narcisse(153)
True
>>> est_narcisse(8208)
True
>>> est_narcisse(10)
False
>>> narcisses_jusqu_a(1000)
'0 1 2 3 4 5 6 7 8 9 153 370 371 407 '
-
Compléter la définition de ces fonctions.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
def est_narcisse(n): """ n – Sortie: >>> est_narcisse(153) True >>> est_narcisse(8208) True >>> est_narcisse(10) False """ pass def narcisses_jusqu_a(N): """ N – Sortie: >>> narcisses_jusqu_a(1000) '0 1 2 3 4 5 6 7 8 9 153 370 371 407 ' """ pass if __name__ == '__main__': import doctest doctest.testmod()
-
Compléter les docstring de ces fonctions.
- Ajouter, pour chaque fonction, au moins un nouveau test avec affichage dans
la partie principale du programme (le
main
).
Une solution possible
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
|
Remplacer☘
Dans cet exercice, la fonction remplace_o_ou()
doit :
-
prendre en paramètre une chaîne de caractères,
-
renvoyer une chaîne copie de celle donnée en paramètre mais dans laquelle les «
o
» ont été remplacés par des «ou
», sauf lorsque «o
» est suivi de «u
» auquel cas, on remplace «ou
» par «o
».
Exemples
>>> remplace_o_ou('loup')
'lop'
>>> remplace_o_ou('ououo')
'ooou'
-
Compléter la définition de la fonction
remplace_o_ou()
.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
def remplace_o_ou(chaine): """ chaine - Sortie: >>> remplace_o_ou('loup') 'lop' >>> remplace_o_ou('ououo') 'ooou' """ pass if __name__ == '__main__': import doctest doctest.testmod()
-
Compléter le docstring de cette fonction.
- Ajouter au moins deux nouveaux tests avec affichage dans la partie principale
du programme (le
main
).
Une solution possible avec une boucle for
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
Une solution possible avec une boucle while
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|