Construyendo un diccionario de turnos y aplicando Shift para cifrado César

Esta pregunta es de un curso en el que estoy trabajando. He intentado responder a esta pregunta, pero no he logrado ningún progreso. Por favor responde con el código que solucionará este problema. El problema está presente a continuación.

Problema: la clase ‘Mensaje’ contiene métodos que podrían usarse para aplicar un cifrado a una cadena, ya sea para cifrar o descifrar un mensaje (ya que para los códigos César esta es la misma acción).

En las siguientes dos preguntas, completará los métodos de la clase de mensaje que se encuentra en ps6.py de acuerdo con las especificaciones en las cadenas de documentación. Los métodos en la clase de mensajes ya completados son:

__init__(self, text)

El método getter get_message_text(self)

El método de get_valid_words(self) , observa que este devuelve una copia de self.valid_words para evitar que alguien self.valid_words la lista original.

En este problema, completarás dos métodos:

Complete el build_shift_dict(self, shift) de la clase Message . Asegúrese de que su diccionario incluya letras mayúsculas y minúsculas, pero que el carácter desplazado para una letra minúscula y su versión en mayúsculas son instancias mayúsculas y minúsculas de la misma letra. Lo que esto significa es que si la letra original es “a” y su valor desplazado es “c”, la letra “A” debería cambiar a la letra “C”.

Si no está familiarizado con el orden o los caracteres del alfabeto inglés, seguiremos el orden de las letras que se muestra con string.ascii_lowercase y string.ascii_uppercase:

 >>> import string >>> print string.ascii_lowercase abcdefghijklmnopqrstuvwxyz >>> print string.ascii_uppercase ABCDEFGHIJKLMNOPQRSTUVWXYZ 

Un recordatorio de la página de introducción: los caracteres como el carácter de espacio, comas, puntos, signos de exclamación, etc. no serán cifrados por este cifrado. Básicamente, todos los caracteres están dentro de la cadena. Los caracteres (0 – 9) se encuentran en ‘string.digits’.

Complete el apply_shift(self, shift) de la clase Message . Puede que le resulte más fácil usar build_shift_dict(self, shift) . Recuerde que los espacios y la puntuación no deben ser modificados por el cifrado.

¡Cualquier ayuda es muy apreciada!

 def build_shift_dict(self, shift): dict1 = {} str1 = string.ascii_uppercase for s in str1: if (ord(s)+shift-65) < 26 : dict1[s] = chr(ord(s)+shift) elif (ord(s)+shift-65) >= 26 : dict1[s] = chr(ord(s)+shift-26) str1 = string.ascii_lowercase for s in str1: if (ord(s)+shift-97) < 26 : dict1[s] = chr(ord(s)+shift) elif (ord(s)+shift-97) >= 26 : dict1[s] = chr(ord(s)+shift-26) return dict1 def apply_shift(self, shift): msg = self.get_message_text() newMsg = "" dict1 = self.build_shift_dict(shift) for i in range(len(msg)): if dict1.has_key(msg[i]): newMsg += dict1.get(msg[i]) else: newMsg += msg[i] return newMsg