62 lines
1.7 KiB
Python
62 lines
1.7 KiB
Python
# coding: utf-8
|
|
minuscules = 'abcdefghijklmnopqrstuvwxyz'
|
|
majuscules = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
|
|
|
def rotation(chaine, x):
|
|
"""
|
|
Effectue une rotation de x caractères vers la droite:
|
|
>>> rotation('abcde', 2)
|
|
'cdeab'
|
|
"""
|
|
return chaine[x:] + chaine[:x]
|
|
|
|
def index(c, chaine):
|
|
"""
|
|
Trouve l'index de c dans la chaine:
|
|
>>> index('n', 'bonjour')
|
|
2
|
|
"""
|
|
for i in range(len(chaine)):
|
|
if (c == chaine[i]):
|
|
return i
|
|
return -1
|
|
|
|
def chiffre_minuscules(chaine, x):
|
|
"""
|
|
Chiffre une chaîne composée de minuscules
|
|
>>> chiffre_minuscules('bonjour', 3)
|
|
'erqmrxu'
|
|
"""
|
|
r = rotation(minuscules, x)
|
|
resultat = ''
|
|
for lettre in chaine:
|
|
resultat = resultat + r[index(lettre, minuscules)]
|
|
return resultat
|
|
|
|
def chiffre(chaine, x):
|
|
"""
|
|
Chiffre une chaîne quelconque
|
|
>>> chiffre('Bonjour les amis!', 3)
|
|
'Erqmrxu ohv dplv!'
|
|
"""
|
|
r_min = rotation(minuscules, x)
|
|
r_maj = rotation(majuscules, x)
|
|
resultat = ''
|
|
for lettre in chaine:
|
|
if lettre in minuscules:
|
|
resultat = resultat + r_min[index(lettre, minuscules)]
|
|
elif lettre in majuscules:
|
|
resultat = resultat + r_maj[index(lettre, majuscules)]
|
|
else:
|
|
resultat = resultat + lettre
|
|
return resultat
|
|
|
|
#############################################################################
|
|
# Programme principal
|
|
#############################################################################
|
|
print(chiffre_minuscules('bonjour', 3))
|
|
print(chiffre('Bonjour les amis!', 3))
|
|
print(chiffre('Erqmrxu ohv dplv!', 23))
|
|
print(chiffre('Eudyr, yrxv dyhc ilql fhw hahuflfh!', 23))
|
|
|