TP sur les listes et sur les chaines

publicité
Ter S ISN
NOVEMBRE 2013
TP Méthode de César/Vigenère
Avertissement : Il faut garder une trace écrite de votre travail. Pour cela, il faut
compléter cette feuille mais aussi prendre des notes sur les méthodes, les formules
utilisées, les manipulations etc. pour pouvoir réviser et travailler de manière autonome.
Appeler le professeur pour vérifier vos programmes, les enregistrer dans un fichier sur
votre clé.
Le But du TP : sur 2 séances
Travailler sur deux nouveaux types : les listes et les chaines sous Python.
Programmer la méthode de César et de Vigénère qui permet de coder un texte, c’est le début de
la cryptographie.
1. Travail sur les listes et les chaines.
A) Le type str (string : chaîne de caractères)
▪ Tapez sur la console les lignes suivantes :
>>> Nom = 'Dupont'
>>> print(Nom)
Dupont
>>> print type(Nom))
<type 'str'>
>>> Prenom = "Pierre"
>>> print(Prenom)
Pierre
>>> print(Nom,Prenom)
Dupont Pierre
# entre apostrophes
# on peut aussi utiliser les guillemets
# ne pas oublier la virgule
La concaténation désigne la mise bout à bout de plusieurs chaînes de caractères.
La concaténation utilise l'opérateur +
▪
>>> chaine = Nom + Prenom
# concaténation de deux chaînes de caractères
>>> print chaine
DupontPierre
>>> chaine = Prenom + Nom
# concaténation de deux chaînes de caractères
>>> print(chaine)
PierreDupont
>>> chaine = Prenom + ' ' + Nom
>>> print(chaine)
Pierre Dupont
>>> chaine = chaine + ' 18 ans '
# en plus court : chaine += ' 18 ans'
>>> print(chaine)
Pierre Dupont 18 ans
▪La
fonction len() retourne la longueur (length) de la chaîne de caractères :
>>> print len(chaine)
20
>>> print(chaine[0])
P
>>> print(chaine[1])
i
>>> print(chaine[1:4])
ier
# premier caractère (indice 0)
# deuxième caractère (indice 1)
>>> print(chaine[2:])
ierre Dupont 18 ans
On ne peut pas mélanger les serviettes et les torchons (ici type str et type int) :
>>> chaine = '17.45'
>>> print(type(chaine))
<type 'str'>
>>> chaine = chaine + 2
TypeError: cannot concatenate 'str' and 'int' objects
Exercice python :
Ecrire un programme qui demande à l’utilisateur de taper son nom et son prénom puis
affiches les initiales correspondantes.
Exemple : Pour ‘Lionel Messi’, le programme doit donner ‘L M’.
Exercice python :
Ecrire une fonction qui donne le nombre de voyelle d’une chaine de caractère.
Exemple : Pour la chaine ‘Allez le Barca’ , la fonction doit retourner 5.
B) Le type
list
(liste)
Une liste est une structure de données.
Le premier élément d'une liste possède l'indice (l'index) 0.
Dans une liste, on peut mélanger les types.
▪ Tapez sur la console les lignes suivantes :
>>> maliste = ['Pierre','Dupont',18,72.5] # types str, str, int et float
>>> print (type(maliste))
<type 'list'>
>>> print (maliste)
['Pierre', 'Dupont', 18, 72.5]
>>> print(maliste[0])
# premier élément (indice 0)
Pierre
>>> print(maliste[2])
# le troisième élément a l'indice 2
18
>>> print(maliste[3])
# le quatrième élément a l'indice 3
72.5
La fonction range() crée une liste d'entiers régulièrement espacés :
>>> liste = range(10)
>>> print(liste)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print type(liste)
<type 'list'>
>>>
>>>
[1,
>>>
liste = range(1,10,2)
print(liste)
3, 5, 7, 9]
print(liste[2])
# range(début,fin,intervalle)
5
On peut créer une liste de listes, qui s'apparente à un tableau à 2 dimensions (ligne, colonne) :
0 1 2
10 11 12
20 21 22
>>> liste = [[0,1,2],[10,11,12],[20,21,22]]
>>> print(liste[0])
[0, 1, 2]
>>> print(liste[0][0])
0
>>> print(liste[2][1])
# élément à la troisième ligne et deuxième
colonne
21
>>> liste[2][1] = 69
# nouvelle affectation
>>> print(liste)
[[0, 1, 2], [10, 11, 12], [20, 69, 22]]
D’autres méthodes (fonctions) à découvrir:
>>> a = [66.25, 333, 333, 1, 1234.5]
>>> print(a.count(333), a.count(66.25), a.count('x'))
2 1 0
>>> a.insert(2, -1)
>>> a
[66.25, 333, -1, 333, 1, 1234.5]
>>> a.append(333)
>>> a
[66.25, 333, -1, 333, 1, 1234.5, 333]
>>> a.index(333)
1
>>> a.remove(333)
>>> a
[66.25, -1,333, 1, 1234.5, 333]
>>> del a[333]
>>> a
[1234.5, 1,-1, 66.25]
>>> a.sort()
>>> a
[-1, 1, 66.25, 1234.5]
>>> a.reverse()
>>> a
[1234.5,66.25,1,-1]
Exercice Python : Proposer un programme qui compte le nombre d’éléments supérieurs ou
égales à 6 dans une liste d’entiers.
Exemple : pour la liste s = [3 5 7 8 12 2] le programme doit renvoyer 3 (il y a 3 entiers
supérieurs à 6 dans la liste s).
Exercice Python : Proposer une fonction base qui à partir d’un chiffre b et d’un entier envoie la
décomposition de cet entier en base b sous forme de liste.
Exemple : b = 5 n = 37 ; base(5,37) = [ 1 2 2]. En effet, 37 = 5² + 2x5 + 2.
2. Codage d’un texte
Principe :
Les algorithmes de cryptographie fonctionnent souvent sur le modèle :
Prendre une lettre Lui associer un nombre Transformer ce nombre Afficher la
lettre correspondant à cette image.
En Python comme dans tous les langages, il existe déjà les fonctions qui associent à
chaque caractère un nombre et inversement. Ce nombre est appelé le code ASCII
(American Standard Code for Information Interchange), dont voici quelques
correspondances :
Lettre espace A B ... Z 0 1 ... 9 a b ... z Code ASCII 32 65 66 ... 90 48 49 ... 57 97 98 ... 122 a) Le code ASCII
En informatique, chaque caractère imprimable est représenté par un nombre entier. En
particulier les lettres minuscules sont représentés par les nombres allant de 97 (code ASCII de
‘a’ à 122 (code ASCII de ‘b’).
On utilise le code ASCII qui donne en hexadécimal le code ASCII des caractères du clavier.
Exemple : A = 41 en hexadécimal = 65 en décimal.
Pour coder le caractère A, on va donc coder en binaire le nombre 65 : 1000001.
Il suffit donc de 7 bits pour coder les caractères de l’alphabet.
Exercice 1 : Compléter le tableau suivant du code qui donne en décimal les lettres en
minuscules de l’alphabet.
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w x
y
z
Exercice python :
Taper ord(‘a’) et chr(99) dans la console python. Que réalisent ces deux commandes ord et
chr ?
Ecrire une fonction qui a comme variable global une chaine de caractère et qui renvoie la liste
des codages en décimal de chacune de ses lettres dans le même sens.
Exemple : pour la chaine ‘barca’ la fonction doit renvoyer [98 97 114 99 97].
b) Codage par la méthode de césar : Chiffrement de César.
Lors de ses batailles, l’empereur romain JULES CÉSAR cryptait les messages qu’il
envoyait à ses généraux. Saméthode de codage consistait à décaler les lettres de 3
rangs, vers la droite, dans l’alphabet.
• Cette méthode de cryptage est appelée chiffrement de César.
• Le nombre de rangs de décalage des lettres est appelé la clé.
Par exemple, si on remplace A par D, on remplace B par E, C par F, D par G, etc...
Donnons un exemple sur à partir de ce décalage de 3 lettres :
Texte clair
A B C D E F G H I J K L M N O P Q R S T
U V W X Y Z
Texte codé
D E F G H I J K L M N O P Q R S T U V W X Y Z
A B C
Exercice :
Codez le message suivant « allez le barca ».
Décodez le message suivant : « PDLV RX HVW FKDUOLH »
Exercice python :
Déterminer un programme qui à chaque lettre de l’alphabet associe le codage de sa
lettre codée.
Pour crypter chaque lettre, on associe à chaque lettre un indice ( 0 pour a, 1 pour b, ….
25 pour z) décaler les indices avec le nombre choisit, et retranscrire le tout en lettre.
Exemple :
1er étape : pour la lettre b, le codage est 98. On doit se ramener à 1. Comment faire ?
2ième étape : On ajoute 3 à ce chiffre ce qui fait 4. Si jamais on part de la lettre z que
se passe t-il ?
Comment faire pour être sur d’avoir un entier entre 0 et 25 ?
3ième étape : à partir du chiffre 4, comment revenir à la lettre e.
Mini-projet : A rendre après les vacances de la toussaint
1) Cryptage
Ecrire un programme qui code une chaine de caractère selon la méthode de César avec
un clé égale à 3 puis avec une clé quelconque.
Exemple : pour la chaine ‘barca’ le programme doit renvoyer ‘edufd’.
2) décryptage
Ecrire un programme qui décode un message selon la méthode de César avec une clé
égale à 3.
Exemple : pour la chaine ‘irrw’ le programme doit renvoyer ‘foot’.
Application : Décrypter ce message codé par la méthode de César
Premier message :
«
LQNA JVR
S JR ZDNUZDN LQXBN MN CANB RVYXACJWC J CN MRAN. S DCRURBNAJR DW
LAHYCJPN JOORWNYXDA LXMNA VXW YAXLQJRW VNBBJPN. »
Téléchargement