Caractères
->
Les solutions proposées ne sont pas forcément les meilleures ! Elles
peuvent même contenir des coquilles... C'est pourquoi je vous invite à
m'envoyer un commentaire pour toutes suggestions, critiques ou autres.
De même, votre propre correction et vos erreurs sont les bienvenues ! (quelque soit la version Python utilisée ou le langage)
♣ Exercice C1: [
Ajouter un commentaire ] [
commentaires ]-Rappel de l'énoncé : L'exercice consiste à créer une fonction
searchC qui a pour paramètres
un mot et
une chaine de caractères et qui renvoie
False si l'élément n'est pas dans la chaîne de caractères, ou
la position du mot dans le cas contraire.
(ici False est un booléen, pas une chaîne de caractères)-une solution fonctionnant sous
Python 2.7.5 et
Python 3.4 :

L1. Début de création de la fonction s'appelant searchC, et ayant comme paramètres i et C.
Boucle for : L2. Pour tout indice k allant de 0 -par défaut- jusqu'à len(C) exclu (len(C) est la longueur de C)
L3. Si l'élément d'indice k est i,
L4. Alors la fonction renvoie k.Fin de boucle for
L5. Si on est là c'est que la condition C[k]=i n'a jamais été vérifiée, donc i n'est pas dans C. On retourne alors le booléen False.
♣ Exercice C2:
-Rappel de l'énoncé : Voici une chaîne de caractères :
"La v13 3st un myst3r3 qu'1l faut v1vr3,
et non un probl3m3 a r3soudr3.Gandh1". L'exercice consiste à afficher
cette chaîne de caractères en remplaçant les 1 par des i et les 3 par des e.
(Cette fois-ci je ne demande pas la définition d'une fonction.) -une solution fonctionnant sous
Python 2.7.5 et
Python 3.4
L1. Création de la chaine de caractères sous le nom de text.
L2. On crée une nouvelle chaine nommée new_text, cette fois-ci vide. (elle sera le résultat final)
Boucle for : L4. Pour chaque élément
de la chaine de caractères initiale
, on va ajouter l'élément voulu dans la nouvelle chaine : L5. à
L6. Si l'élément est
'1' alors on met
'i' dans la nouvelle chaine,
L7. à
L8. Si l'élément est
'3' alors on met
'e' dans la nouvelle chaine,
L9. à
L10. Sinon on met l'élément lui-même dans la nouvelle chaine.
Fin de boucle forL12. On affiche la nouvelle chaine de caractères à l'aide de la fonction
print.
Ceci doit retourner:
La vie est un mystere qu'il faut vivre, et non un probleme a resoudre.Gandhi
ATTENTION!! On ne peut pas faire texte[3]='i' car les chaines de caractères ne sont pas mutables ! L'erreur renvoyée est la suivante :
TypeError: 'str' object does not support item assignment
REMARQUE!! new_text+='i' signifie new_text= new_text + 'i'
♣ Exercice C3:
-Rappel de l'énoncé : L'exercice consiste à créer une fonction
compteur qui a pour paramètres
une lettre et
une chaine de caractères, et qui renvoie le
nombre d'apparitions de la lettre dans la chaîne de caractères.
-une solution fonctionnant sous
Python 2.7.5 et
Python 3.4 :
L1. Création de la fonction nommée compteur, avec deux paramètres : chaine et lettre.
L2. On initialise le nombre d'apparitions j de "lettre" à 0.
Boucle for :
L3. On parcourt la chaine de caractères chaine en prenant chacun de ses éléments i.
L4. Si l'élément i en question correspond à la lettre recherchée (lettre), alors :
L5. On incrémente j
Fin de boucle for.
L6. On renvoie le nombre d'apparitions j à l'aide de return.
♣ Exercice C4:
-Rappel de l'énoncé : L'exercice consiste à créer une fonction
mix qui a pour paramètre
une chaine de caractères c, et qui renvoie
une chaine de caractères créée aléatoirement à partir de c.
-une solution fonctionnant sous
Python 2.7.5 et
Python 3.4 :
Code copiable : [Afficher]
import random
def mix(c):
Result=''
L=list(c)
n=len(L)
while len(Result) elt=random.choice(L)
L.remove(elt)
Result+=elt
return(Result)


L1. On
importe random pour pouvoir utiliser une fonction qui choisira un élément au hasard.
L3. On crée la fonction mix qui a pour paramètre c.
L4. On initialise Result à une chaîne de caractères vide
' '.L5. On découpe la chaîne de caractères c en une liste de caractères à l'aide de la fonction
list( ).
L6. On note n la taille de la liste, c'est-à-dire le nombre de caractères constituant c.
Boucle While :
L7. Tant que Result a moins de n caractères,
L8. On choisit un élément (noté elt) au hasard dans L grâce à la fonction choice( ) se trouvant dans random,
L9. On supprime de L l'élement choisit, pour qu'il ne puisse pas être choisit une deuxième fois, à l'aide de remove( ).
L10. On place elt à la fin de Result par concaténation.
Fin Boucle While : On est ici lorsque Result a le même nombre de caractère que c. C'est-à-dire que Result est un mélange des lettres de c.
L11. On
renvoie Result.
♣ Exercice C5: - Rappel de l'énoncé : Utiliser la fonction de l'exercice C4 ( mix ) pour créer une fonction
invmot qui a pour paramètre un mot,
mot, et qui renvoie
un autre mot en mélangeant les lettres sauf la première et la dernière lettre.
- une solution fonctionnant sous
Python 2.7.5 et
Python 3.4 :
Code copiable : [Afficher]
def invmot(mot):
n=len(mot)
init,end=mot[0],mot[n-1]
mot=mot[1:n-1]
word=init+mix(mot)+end
return(word)

L1. On
définit la fonction s'appelant
invmot et ayant un paramètre nommé
mot.L2. On pose n, la longueur de mot, grâce à la fonction
len( ).
L3. On nomme init le premier caractère de mot (i.e. celui d'indice
0) et end le dernier caractère de mot (i.e. celui d'indice
len(mot)-
1).
L4. On ne garde que l'intérieur du mot : i.e. on ne prend que les lettres allant de la deuxième lettre (indice
1) à l'avant dernière (indice
n-2).*
L5. On crée un nouveau mot word composé de la première lettre init, suivit de mot mixé par la fonction mix de l'exercice précédent, suivit de la dernière lettre end.
L6. On
renvoie word.
*
ATTENTION !!! truc[a,b] inclu l'élément a mais exclu l'élément b.
♣ Exercice C6: - Rappel de l'énoncé : Utiliser la fonction de l'
exercice C5 (invmot) pour créer une fonction
melange qui a pour paramètre une
chaine de caractères c et qui en renvoie
une autre telle que les lettres de chaque mot soient mélangées excepté la première et la dernière lettre.
-une solution fonctionnant sous
Python 2.7.5 et
Python 3.4:
Code copiable : [Afficher]
def melange(c):
L=c.split()
print(L)
txt=''
for i in range(len(L)):
L[i]=invmot(L[i])
txt +=L[i]+ ' '
return(txt)
print(melange("Tous les hommes pensent que le bonheur est au sommet de la montagne alors qu'il est dans l'art de la gravir."))

L1. On définit la fonction
melange de paramètre
c.L2. On découpe c en une liste de mots à l'aide de la méthode split( ) (découpe à chaque espace
' ').
L3. On initialise txt à une chaine de caractères vide
' '.Boucle for : L4. Pour tous mots, i.e. pour tous éléments de L,
L5. On mélange le mot à l'aide de la fonction invmot.
L7. On l'ajoute à la fin de txt, sans oublier l'espace
' ' pour séparer le mot du prochain.
Fin Boucle forL8. On
renvoie txt.
♣ Exercice C7: - Rappel de l'énoncé : L'exercice consiste à créer une fonction
nbr_occur qui a pour paramètre une chaîne de caractères
chaine et qui renvoie
un
dictionnaire dont les clés sont les caractères utilisés dans la chaîne,
et dont les valeurs sont le nombre d'occurrences de la clé dans la
chaîne.
Code copiable :
[Afficher]
def nbr_occur(chaine):
dico={}
for caractere in chaine:
val=chaine.count(caractere)
dico[caractere]=val
return(dico)
Gandhi="Soyez le changement que vous voulez voir dans le monde"
print(nbr_occur(Gandhi))


L1. On commence la définition de la fonction en écrivant le nom de la fonction (
nbr_occur) et le nom de son paramètre (
chaine).
L2. On initialise dico à un dictionnaire vide {}.
Boucle for : L3. Pour tous caractères
dans chaine,
L4. On enregistre son nombre d'occurrences dans val, à l'aide de la méthode
count. L5. On crée la clé caractère de valeur val dans dico.
Fin Boucle forL6. On
renvoie dico.
♣ Exercice C10:- Rappel de l'énoncé :
1) En utilisant la fonction
ord de python, créez une fonction qui prend comme paramètre
une lettre de l'alphabet sans accent, et qui renvoie
son numéro de place dans l'alphabet.
2) Créez la fonction inverse en utilisant la fonction
chr.
Code copiable :
[Afficher]
def formatage(mot):
L = list(mot)
for i in range(len(L)):
L[i] = (ord(L[i]) - 97)%256
return(L)
def lecture(L):
s = ''
for i in range(len(L)):
s += chr( (L[i]+97)%256 )
return(s)

1) Formatage
L2. On commence par initialiser la liste à remplir : elle correspond initialement à la liste des lettres du mot.
Boucle For : L3. Pour chaque lettre :
L4. On la remplace par son numéro (
ord de la lettre) moins
97 (car a correspond à 97 et non à 0 comme voulu) modulo
256 pour éviter les erreurs (car 256 caractères sont codés).
Ici
ord(L[i]) renvoie le numéro du caractère L[i] mais il faut savoir que l’alphabet commence à 97.
Fin boucle for : L5. On
renvoie la liste.
2) Lecture
L8. On initialise la chaine de caractères à renvoyer à une chaine de caractères vide.
Boucle For : L9. Pour chaque nombre de la liste L :
L10. On rajoute dans s la lettre correspondant au numéro L[i] +
97 modulo
256 (modifications inverses à celles faites dans la question 1).
Fin boucle for : L11. On renvoie le mot s.
♣ Exercice C11:- Rappel de l'énoncé : Créez une fonction rot13 qui a comme paramètre un mot composé de lettres sans accent et qui renvoie ce mot codé en rot13.
Code copiable :
[Afficher]
def rot13(mot):
L = formatage(mot)
for i in range(len(L)):
L[i] = (L[i]+13)%26
return(lecture(L))

Ici, j'ai utilisé les deux fonctions de l'exercice C10.
L15. On récupère la liste des nombres associés aux lettres du mot.
Boucle for :
L16. Pour chaque nombre :
L17. On lui ajoute le nombre
13 comme l'algorithme le préconise, puis on prend le modulo
26 pour toujours retomber sur une lettre de l'alphabet.
Fin boucle for : L18. On
renvoie le mot après avoir retranscrit les nombres en lettres à l'aide de la fonction lecture.
♣ Exercice C12: - Rappel de l'énoncé :
Après avoir crée la chaine de caractères correspondant au texte suivant :
texte = "\n<< Être seul dans un monde qui ne change jamais.>>\nDans le cerveau des autistes,Temple Grandin"
- Affichez le texte,
- Affichez le caractère d'indice 22 et le dernier caractère,
- Affichez la chaîne de caractères composée des caractères allant de l'indice 0 à l'indice 50,
- Ajoutez la chaîne de caractères " et Richard PaneK" au texte, puis affichez le résultat,
- Zut, le dernier caractère voulu n'est pas "K" mais "k"... Repartez de la variable texte modifiée pour corriger cette erreur.
Attention : on ne peut pas modifier un caractère d'une chaîne en faisant texte[-1] = "k".
On dit que cette objet est immutable.
Voici une solution en Python 3.4 :
Code copiable : [Afficher]
texte = "\n<< Être seul dans un monde qui ne change jamais.>>\nDans le cerveau des autistes,Temple Grandin"
print(texte)
print("\nle caractère d'indice 22 est ", texte[22],"\nle dernier caractère est ",texte[-1])
print(texte[0:51])
texte += " et Richard PaneK"
print(texte)
texte = texte[0:-1] + "k"
print(texte)
L1. Création de la variable texte.
L4. On affiche le contenu de la variable texte à l'aide de la fonction
print.
L5. On récupère le caractère d'indice
22 de la variable texte avec l'instruction texte[
22] et on l'affiche avec la fonction
print.
Pour le dernier caractère on utilise l'indice
-1 ou len(texte) qui fait référence au dernier indice de la variable texte. Ici j'ai choisi l'indice
-1.
(la fonction len renvoie le nombre d'éléments composant la variable mise en paramètre)
L6. On récupère les 51 premiers éléments successifs de la variable texte en faisant texte[
0:
51].
Attention : texte[i0,if] correspond à l'ensemble des éléments d'indices i0 à l'indice if-1.
L8. On ajoute une chaine de caractères à la fin de la variable texte à l'aide de l'opération + ou +=.
( a += b revient à faire a = a+b)
L9. On affiche la variable texte qui vient d'être modifiée.
L11. On récupère les caractères qu'on ne veut pas modifier avec l'instruction texte[i0,if]. Ici on prend tous les éléments sauf le dernier (
"K") donc i0 correspond à
0 et if au dernier indice. (
Rappel : texte[i0,if] correspond à l'ensemble des éléments d'indices i0 à l'indice if-1. ) Ici encore le dernier indice peut être écrit par
-1 ou len(texte), ici j'ai choisi d'écrire
-1.
Ensuite on ajoute à ce bloc le caractère
"k" et on redéfinit la variable texte par cette somme.
L12. On affiche la nouvelle variable texte à l'aide de la fonction
print.
Voici les résultats obtenus pour chaque question :
♣ Exercice C13: - Rappel de l'énoncé :
Créez une fonction inverse qui prend une chaine de caractères en paramètre et qui renvoie son inverse.
Code copiable : [Afficher]
def inverse(mot):
inverse = ""
size = len(mot)
for i in range(size):
inverse += mot[size-1-i]
return(inverse)
print(inverse("mot"))
L1. On
définit la fonction inverse et on nomme son paramètre mot.
L2. On initialise la chaine de caractères inverse à une chaine vide.
L3. On récupère la taille de la chaine de caractères à l'aide de
len.
Boucle for : L4. On parcourt la chaine de caractères :
L5. On la lit en commençant par la fin : on place à la fin de inverse le caractère lu dans mot. L'indice du caractère récupéré dans mot va donc de size-1 à 0.
Fin boucle for : L6. Une fois le mot lu en entier, on renvoie inverse.
♣ Exercice C14: - Rappel de l'énoncé :
Écrivez un programme qui demande à l'utilisateur le prix unitaire des articles qu'il a acheté et le nombre d'articles achetés.
Le programme doit ensuite afficher le prix total hors taxe et le prix total TTC avec une TVA de 20%.
Code copiable : [Afficher]
prix = float(input("A quel prix achetez-vous vos articles ? "))
nbr = float(input("Combien d'articles achetez-vous ?"))
HT = prix*nbr
TTC = HT + HT*0.2
affichage = "nombre d'articles : {0} \nprix total Hors taxe : {1}€ \nprix total TTC : {2}€".format(nbr,HT,TTC)
print(affichage)

L1. On demande le prix avec la fonction
input qui affiche ce qu'elle a en paramètre et attend de recevoir une chaine de caractères. Ici il ne fait pas oublier de convertir en
float.
L2. On fait de même pour récupérer le nombre d'articles.
L4. On calcule le coût hors taxe en multipliant le prix unitaire avec le nombre d'articles.
L5. On calcule le coût TTC en ajoutant au prix hors taxe 20% de lui-même.
L7. On affiche tout ça avec la fonction format qui place ses paramètres dans la chaîne de caractères là où les {i} se trouvent ( {0} sera remplacé par le premier paramètre, {1} par le second ...)
L9. On affiche le texte obtenu à l'aide de
print.