Soyez le premier à donner votre avis sur cette source.
Snippet vu 34 052 fois - Téléchargée 18 fois
#!/usr/bin/python # -*- coding:Utf-8 -*- from string import upper class Crypto: """Cryptage utilisant le chiffre de césar ch = chaine, d = décalage""" def __init__(self, ch, d): self.ch, self.d = ch, d #On initialise les dictionnaires. Correspondance pour crypter, decorrespondance pour décoder self.correspondance = {} self.decorrespondance = {} #On construit les listes. alpha = alphabet normal. ald = alphabet avec le décalage self.alpha = [chr(x) for x in xrange(97, 123)] self.ald = [self.alpha[(i+self.d)%26] for i in xrange(26)] #Utilisation du modulo pour éviter le OutOfRange #Construction de correspondance for x in xrange(26): self.correspondance[self.alpha[x]] = self.ald[x] def inverser_dico(self): """Construction du dictionnaire decorrespondance en inversant clé/valeur de correspondance afin d'accéder à la traduction""" for (k, v) in self.correspondance.items(): self.decorrespondance[v] = k return self.decorrespondance def code(self, p): """Coder et décoder le texte""" self.new_ch = [] self.inverser_dico() for car in self.ch: if car is ' ': self.new_ch.append(' ') else: if p is True: self.new_ch.append(self.correspondance[car]) else: self.new_ch.append(self.decorrespondance[car]) return self.new_ch if __name__ == "__main__": while 1: chx = raw_input("Voulez (C)rypter ou (D)écrypter votre texte : ") if chx.upper() == 'C': x = True elif chx.upper() == 'D': x = None else: print "Mauvais choix !" break decalage = raw_input("De combien de lettres voulez vous décaler votre code : ") if decalage.isdigit(): txt = raw_input("Veuillez entrer votre texte :\n") a = Crypto(txt.lower(), int(decalage)) else: print "Vous devez entrer un nombre !" break try: a.code(x) print ''.join(a.code(x)) except: print "Vous ne devez rentrer que des lettres !" break r = raw_input("Autre texte à coder ( 1: Oui, Entrée: Non ) : ") if r == '1': continue else: break
26 janv. 2008 à 23:06
def cesar(ch, d): return ''.join([chr(ord(l)+d) for l in ch])
5 déc. 2007 à 20:25
Cordialement :)
28 nov. 2007 à 21:04
Je pense que tu aurais pu simplifier ton code en utilisant la fonction ord(). Elle retourne la valeur ascii d'un caractère.
Ex: print ord('a') affiche 97.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.