correction de la partie A (exercice 1)
def lettre_suivante(lettre) : c = ord(lettre) - 97 c = (c + 1) % 26 return chr (c + 97) print (lettre_suivante('m'), lettre_suivante('z'))
correction de la partie B (exercice 2)
mots = ['eddard', 'catelyn', 'robb', 'sansa', 'arya', 'brandon', 'rickon', 'theon', 'rorbert', 'cersei', 'tywin', 'jaime', 'tyrion', 'shae', 'bronn', 'lancel', 'joffrey', 'sandor', 'varys', 'renly', 'a' ] def mots_lettre_position (liste, lettre, position) : res = [ ] for mot in liste : if position < len(mot) and mot[position] == lettre : res.append (mot) return res r = mots_lettre_position ( mots, 'y', 1) print (r)
correction de la partie C (exercice 3)
def dictionnaire_choisi (liste) : d = { } for mot in liste : for i,c in enumerate(mot) : d [i,c] = d.get ((i,c), []) + [ mot ] return d def mots_lettre_position (d, lettre, position) : return d.get ( (position, lettre), [] ) d = dictionnaire_choisi(mots) r = mots_lettre_position ( d, 'y', 1) print (r)
code de César partie D (exercice 4)
m = "JENESUISPASCODE" s = "".join( [ chr((ord(l)-65+3)%26+65) for l in m ] ) print (s)
solution du code de Vigenère (exercice 5)
def code_vigenere ( message, cle) : message_code = "" for i,c in enumerate(message) : d = cle[ i % len(cle) ] d = ord(d) - 65 message_code += chr((ord(c)-65+d)%26+65) return message_code print ( code_vigenere ("JENESUISPASCODE", "DOP") )
solution du code de Vigenère (décodage) (exercice 6)
def code_vigenere ( message, cle, decode = False) : # ligne changée message_code = "" for i,c in enumerate(message) : d = cle[ i % len(cle) ] d = ord(d) - 65 if decode : d = 26 - d # ligne ajoutée message_code += chr((ord(c)-65+d)%26+65) return message_code print ( code_vigenere ("MSCHGJLGEDGRRRT", "DOP", True) )