Vamos a crear ahora un método -al que vamos a llamar "cifra"- que cifre un mensaje de texto: tendrá que recorrer cada una de las letras de dicho mensaje calculando su índice en "alfabeto" y añadiendo a este índice la clave, para calcular a continuación el módulo con respecto a la longitud del alfabeto (ya sabes, para estar considerando siempre como nuevo índice una letra del mismo). Este método quedaría así:
def cifra(self, mensaje):
mensaje_cifrado = ""
for letra in mensaje:
indice = CifradorCesar.alfabeto.index(letra)
nuevo_indice = (indice + self.clave) % len(CifradorCesar.alfabeto)
mensaje_cifrado += CifradorCesar.alfabeto[nuevo_indice]
return mensaje_cifrado
Comenzamos creando una variable ("mensaje_cifrado") para almacenar las letras una vez cifradas. En el bucle for extraemos el índice de cada letra a cifrar, calculamos el nuevo índice sumando la clave (a la que accedemos por medio de self.clave) y calculando el módulo con respecto a la longitud del alfabeto (al que accedemos por medio de CifradorCesar.alfabeto), y añadimos a "mensaje_cifrado" la letra con el nuevo índice. Finalmente devolvemos el mensaje cifrado.
La clase completa quedaría de la siguiente forma:
class CifradorCesar:
import string
alfabeto = string.printable
def __init__(self, clave):
self.clave = clave
def cifra(self, mensaje):
mensaje_cifrado = ""
for letra in mensaje:
indice = CifradorCesar.alfabeto.index(letra)
nuevo_indice = (indice + self.clave) % len(CifradorCesar.alfabeto)
mensaje_cifrado += CifradorCesar.alfabeto[nuevo_indice]
return mensaje_cifrado
Probémosla:
c = CifradorCesar(7)
c.cifra("Python para Data Science")
'WFAovu1whyh1KhAh1Zjplujl'
¡Parece que funciona!