[TP4] César - fini ; Vigenère - en cours

This commit is contained in:
Suwako Moriya 2019-12-12 08:15:58 +00:00
parent 236bb61ec3
commit 4ba3b96f1c

78
TP4/main.py Normal file
View File

@ -0,0 +1,78 @@
import matplotlib.pyplot as plt
def tr(texte):
return [ord(char) - 97 for char in texte]
def rev(l):
return ''.join([chr(i + 97) for i in l])
# César
"""
1 : maitrecorbeau donne, en décalant de 5 : hvdomzxjmwzvp
2 : en utilisant l'opération % (a%b)"""
# 3:
def codageCesar(t, d):
n=len(t)
res=[0 for i in range(n)]
for i in range(n):
res[i]=(t[i]-d)%26
return res
# 4:
def decodageCesar(t, d):
return codageCesar(t, -d)
# 5:
def frequences(t0):
return [t0.count(i) for i in range(26)]
# 6:
def graphe_frequences(t0):
plt.plot(list(range(1, 27)), frequences(t0), 'ro')
plt.ylabel('fréquences')
plt.xlabel('lettres')
plt.show()
# 7:
def max(l):
m=__builtins__.max(l)
res=(m, [])
for i, char in enumerate(l):
if char == m:
res[1].append(i)
return res
# 8:
def decodageAuto(t0):
codes=[]
for c in max(frequences(t0))[1]:
codes.append(decodageCesar(t0, tr('e')[0]-c))
return codes
"""
Malgré le fait que la lettre e soit la plus fréquente en français, il est possible d'écrire de manière compréhensible sans l'utiliser majoritairement. Ainsi, cette méthode ne vérifie pas tant que le texte ait du sens. La fonction ne donne donc pas toujours le texte originel"""
# Vigenère
# 1: On obitent 'kichwjrbvegr'
# 2:
def codageVigenere(l, c):
return [(char + c[i%len(c)])%26 for i, char in enumerate(l)]
# 3: La fonction suivante détermine le pgcd de a et b. En effet, le programme s'arrête lorsque b vaut zero. C'est l'algorithme d'euclide.
def pgcd(a, b):
while b:
a, b = b, a%b
return a
# 4: