Bonjour
Bel effort. C'est bien de se motiver pour apprendre et se donner de petits challenges. Et ton programme est parfaitement fonctionnel. Simplement il a quelques petites maladresses qui, j'espère, disparaitront avec le temps.
Par exemple il faut absolument éviter ce qu'on appelle les "nombres magiques" c'est à dire les valeurs telles que 91 ou 96. Ca rend le code confus et difficilement maintenable. Tu as à ta disposition la fonction "ord()" alors autant t'en servir (je pense que ce serait plus clair de lire
if i >= ord('a') que
if i > 96). De même mot2 n'a pas besoin d'être une liste. Tu peux très bien définir mot2 comme une string et lui rajouter des caractères en écrivant
mot2=mot2+"caracteres_a_rajouter" (n'oublie pas la philosopie de Python: simple est mieux que complexe).
Par ailleurs, tu pourrais rendre ta fonction beaucoup plus souple déjà en mettant le décalage comme paramètre. Ainsi c'est l'utilisateur qui choisit de combien il veut décaler. Et en plus si tu définissais carrément ta plage de caractères comme alphabet ex
alphabet="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789". Ensuite, te suffirait de regarder si la lettre à chiffrer se trouve dans "alphabet" et si c'est le cas, récupérer la lettre située n rangs derrière sinon laisser la lettre inchangée.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| def mot_a_coder(mot, n):
alphabet="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
motX=""
for x in mot:
f=alphabet.find(x)
if f != -1:
motX=motX + alphabet[(f + n) % len(alphabet)]
else:
motX=motX + x
# if
# for
return motX
# mot_a_coder()
mot="Hello World"
motSecret=mot_a_coder(mot, 5)
motClair=mot_a_coder(motSecret, -5)
print(mot)
print(motSecret)
print(motClair) |
L'avantage, c'est que tu peux ensuite rajouter facilement des caractères en plus, comme la ponctuation ou l'espace. Tu les rajoutes simplement dans "alphabet" sans rien changer d'autre et non seulement la fonction s'adapte automatiquement mais en plus tous les caractères de "alphabet" participeront au chiffement. Ainsi "Hello" pourra devenir "y*;;-" ce qui renforce d'autant plus le secret.
L'inconvénient c'est que la fonction n'est plus (comme la tienne) réflexive. Si on veut chiffrer de 5 rangs il faudra passer "5" comme paramètre, si on veut déchiffrer il faudra demander "-5".
Partager