facile
Chiffre de César
Le chiffrement de César transforme un message en changeant chaque lettre par une autre obtenue par décalage circulaire dans l'alphabet de la lettre d'origine. Par exemple, avec un décalage de 3, le 'A'
se transforme en 'D'
, le 'B'
en 'E'
, ..., le 'X'
en 'A'
, le 'Y'
en 'B'
et le 'Z'
en 'C'
.
flowchart TD
subgraph "Décalage de 3"
direction TB
bef1[...]
W1[W]
X1[X]
Y1[Y]
Z1[Z]
A1[A]
B1[B]
C1[C]
D1[D]
aft1[...]
end
subgraph " "
bef2[...]
Z2[Z]
A2[A]
B2[B]
C2[C]
D2[D]
E2[E]
F2[F]
G2[G]
aft2[...]
end
W1 --> Z2
X1 --> A2
Y1 --> B2
Z1 --> C2
A1 --> D2
B1 --> E2
C1 --> F2
D1 --> G2
Les autres caractères ('!'
, '?'
...) ne sont pas transformés et sont simplement recopiés tels quels dans le message codé.
Dans cet exercice, nous ne prendrons que des lettres majuscules.
On fournit les deux fonctions
indice
: renvoie l'indice dans l'alphabet d'une lettre majuscule en commençant à 0.
majuscule
: renvoie la lettre majuscule d'indice donné.
Exemples
🐍 Console Python >>> indice ( 'C' )
2
>>> majuscule ( 4 )
'E'
Remarque
Pour opérer un décalage circulaire d'un indice, on utilise l'opération modulo \(26\) qui renvoie un résultat de \(0\) inclus à \(26\) exclu.
Décalage de 8 pour la lettre 'Z'
🐍 Console Python >>> indice ( 'Z' )
25
>>> 25 + 8
33
>>> 33 % 26
7
>>> majuscule ( 7 )
'H'
Le chiffrement de
'Z'
sera ici
'H'
.
Objectif
Écrire la fonction cesar
qui prend en paramètres une chaine de caractères message
et un nombre entier decalage
et renvoie le nouveau message chiffré avec le chiffre de César utilisant ce decalage
.
On constate que pour déchiffrer un message, il suffit d'utiliser la clé opposée à celle du chiffrement.
Exemples
🐍 Console Python >>> cesar ( "HELLO WORLD!" , 5 )
'MJQQT BTWQI!'
>>> cesar ( "MJQQT BTWQI!" , - 5 )
'HELLO WORLD!'
.9875.65038.128013bqê,9vià3o_;jlpwZf( gù06-)2As1+8e%né4èm5tCRPhk`J:c.a=rySu/7d050.0J0R0$0j0q0F0w0!0q0$0F0F0%010R0j0r010406050F0+0P0P0$0(0)040*0m0q0+120m0L0w020$0P0r0o0w0T0J1c0(0e0+0J0F050,191b1d1f170r04051K1D1N0,1K170.0j0i0`0|0~100V0j0x0V0q1#0V0R15050=0d0q0J1W0}0 011!1$1(1$0R1.1:1,0R0(1L0R0V0`1i0F0r0$0L100D011=1Y010u0@0J0L1q0J1,282a2f1@2i1:2l0P2n040c0w0U0(0m0r0m0F0j1l1n0:260(0(0J0!2I1D2p0L1L0,242U2123221-0.2r101(0L2k2F1,1T1V0{1?2(0j2*0L0m2.1,0r2N1L2S2U2 18291n2:2g2^0(1c0q150w0G2R3316322q351@37393b0D3e2a3g2S2%013l0$3a040w0l3p2T173s3j103v3x0w0N3B3r333t3H3b0Q3L3D3N3F3u0m383w3b0A3S3h341X3k3X3m3y0-3$3E3)3G3+3Z3y0I3/3U3;3W3Y3I0h3`3i3|3P040G0z413(2;3}3,0G3d1E3f3T424a440G3o4f3q4h49363?3x0G3A4n3C3%3O4s150G3K4w3M4i4r3~4B3R4E4p4z4I453#4L4y3V4k3.4R3:4j4A453_4W3{4Y4O0G404$4G3*4O0D474,4q4.3,0D4e2 4M4T4Z0D4m4{4S434~4v311Q2}1D2.2X0.232$3V0!2_2x0/1U1L2|0J2~3f3L055g0:5o4-100W150:0u5q4X2g0s3b5B4%360u152?1T0!0J5G5v0114040v5P4?3G150!1d0$2P0J2N5V3t5S0C0Z3S0w5/0w524a0F2d04021z0m0R0o1v0L0i0m0j1;0q02030l0h0o5L0j5N0w2K0X5Z0(5#0R5%0J0X0w1z0j6e620R0w0f211;0+2*0w1c0p0+0F0!0+1:5`0+5|0o5.5:5=2g5x042N0R0+0(0L3L5;5C3k0d153X0.5)3V5S5U4E6O3k5Y5!5$5(6-6Z105+6X6.100m150B6{6^3u6#046%6)3|6+775?5^6I6K0E7d5}7a2g6`4L064|3|6Q5z7i1@5E3y7r3G5J046B6D6F1:7v5R156,31720L5K7D5+5-4=3t7t5:5;6@5H1@0F0.157g0o7Z7Z5 61630w0|6A0$6C6E6G1;0.66686a0L5M7;1m0L0M5O7O3V7W3b5:7z7/1:0v0z0C0w2N60621;7?697f6769483t823y847-7A7:0v0D0Q8a8c7(8f8j0o0t8g6L803|8n7R7#5{5}7Z6M5/6|016Q6S6U6W4E6Y7U3G740!0V0(7L7F7D0L74767T5Q798-5W015@7Y8K0o7f8^8%040C718X016~040H8 5Q7J040j8|8~7l7n4a7p0J5A8:7P5F9i4T7x5N0F1d8|7G5p7I152w0~0$0x7 7H905S0g958;970:5Z0|9z9a7N4{7R8P972N190q0=0R9F3t920%9X817c8^8M4L9P726Q0u3X9#436:6i6=9A3f8W5Q0m7t2?9:4j9v1B9p9L9l78159N4g7R9+906Q0j9h2 9`8;8?5_8^8`6J7h8V8P92029U0o9!ap9u046h6j6l9 2garatavag8Paj7Z8C8{a54a5Sa84oaaaSah3O7Kaw909ZaC6/987_6c9^3q8P8/9B969=aA6?a-8;7k9OaTaba.98a!6}15aG9_a+8(aN36aWaH729294aXa{9I3w9ya)2Tb28}a}91150Kbk0P0j150D4Qa^a_8Oax9S6G9Vbkb9b03qaU4T9v8q86bg5ua?b3a=aVa|b41@a@a9aT8P6Q0J0^bKbiaQ3Cbv6Nbx1Bbz0$9Wbb8;bCbk97az9@8NbF7o158S6Vb=b|b+9Ub-3$0,5s5n1O580,5a1D0R5ccc2!2V0$1/c7ca5k1JbL3t2N0P0n0u0$0W0J0n0V0l151v1x1z1B0wb$2U1R050V0G0w0j0.100}0r2O0R0B0F2O6U2H2x0E28cS0w0F0M6F0(2H0M050$3t0V0J0$0:0(2)5x0w8#9g1003cQcScUcWc+6k2e120R1:100U5%1c2@6tc_150a0b1D0$2UcK3g1K0Y7:0_0S0M9p0(0w1k0@0j9p2H0`0;6k6A0M245h0w0$0i2O7*003w0r0Vci0;0w0x2N0!0g0w2^340m1rc+0_2K7+0r1j290(6t0:0_0x0$6G620FdZ1cdA7,2Hd)0M0wd/dO0M1(dF2Cd}2*0#1Odo040SdE1;0PdH0VdJ2K8!ae0ucq2k6t0L001B6t290_c(c*dA7~0wdU210O0_ct0!2j060k0`1?5%eE1n6k0L0=eU0w0R0m6D7*cE0.c)be9z0_2E0~0jcj0_eZeR0wctdA2a6t6y0J062a3w0)cV6ecEeq0McD0L9of20_1:1}9Sec1Qee0E0+0peZ0(0.000V0+0jdZbY1:eE0Fe`121(c(7;2afacE1(0i9S0B0p0J0+0w0m0yfL1n0FeZdScY6r0L2*dw6ycMa%6d1c0F1z0MdZeJ2j2weW5#9o2GcjfecIca0;0?0^04.
# Tests
(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)