2 usuarios conectados

Cifrado César. Ejercicio en Python

Comparte esto

 

El cifrado César es una técnica simple de cifrado por sustitución donde cada letra en el texto original se desplaza un cierto número de posiciones en el alfabeto.

Escribe una función en Python llamada cifrado_cesar que tome una cadena de texto en español y un valor de desplazamiento entero como entrada, y devuelva la cadena cifrada. La función debe mantener la capitalización de las letras y solo cifrar las letras del alfabeto español (ignorando números, símbolos y espacios).

 


Más ejercicios




Mostrar/Ocultar ejercicio resuelto


  Solución al Ejercicio: Cifrado César

📋 Copiar código


def cifrado_cesar(texto, desplazamiento):
  """
  Aplica un cifrado César a una cadena de texto en español.

  Args:
    texto: La cadena de texto en español a cifrar.
    desplazamiento: El número entero de posiciones a desplazar las letras.

  Returns:
    La cadena de texto cifrada.
  """
  resultado = ''
  for caracter in texto:
    if 'a' <= caracter <= 'z':
      orden_original = ord(caracter) - ord('a')
      orden_cifrado = (orden_original + desplazamiento) % 26
      resultado += chr(orden_cifrado + ord('a'))
    elif 'A' <= caracter <= 'Z':
      orden_original = ord(caracter) - ord('A')
      orden_cifrado = (orden_original + desplazamiento) % 26
      resultado += chr(orden_cifrado + ord('A'))
    elif 'ñ' == caracter:
        orden_original = 14 # 'ñ' está en la posición 14 (0-indexed)
        orden_cifrado = (orden_original + desplazamiento) % 27 # Alfabeto español tiene 27 letras
        if orden_cifrado == 14:
            resultado += 'ñ'
        elif orden_cifrado < 14:
            resultado += chr(orden_cifrado + ord('a'))
        else:
            resultado += chr(orden_cifrado - 1 + ord('a')) # Saltar la 'ñ' en el rango 'a'-'z'
    elif 'Ñ' == caracter:
        orden_original = 14
        orden_cifrado = (orden_original + desplazamiento) % 27
        if orden_cifrado == 14:
            resultado += 'Ñ'
        elif orden_cifrado < 14:
            resultado += chr(orden_cifrado + ord('A'))
        else:
            resultado += chr(orden_cifrado - 1 + ord('A')) # Saltar la 'Ñ' en el rango 'A'-'Z'
    else:
      resultado += caracter
  return resultado

# Ejemplos de uso
texto1 = "Hola Mundo"
desplazamiento1 = 3
resultado1 = cifrado_cesar(texto1, desplazamiento1)
print(f"'{texto1}' cifrado con {desplazamiento1}: '{resultado1}'")

texto2 = "abcdefghijklmnñopqrstuvwxyz"
desplazamiento2 = 5
resultado2 = cifrado_cesar(texto2, desplazamiento2)
print(f"'{texto2}' cifrado con {desplazamiento2}: '{resultado2}'")

texto3 = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ"
desplazamiento3 = 10
resultado3 = cifrado_cesar(texto3, desplazamiento3)
print(f"'{texto3}' cifrado con {desplazamiento3}: '{resultado3}'")

texto4 = "Texto con números 123."
desplazamiento4 = 1
resultado4 = cifrado_cesar(texto4, desplazamiento4)
print(f"'{texto4}' cifrado con {desplazamiento4}: '{resultado4}'")

texto5 = ""
desplazamiento5 = 7
resultado5 = cifrado_cesar(texto5, desplazamiento5)
print(f"'' cifrado con {desplazamiento5}: '{resultado5}'")

texto6 = "zañ"
desplazamiento6 = 1
resultado6 = cifrado_cesar(texto6, desplazamiento6)
print(f"'{texto6}' cifrado con {desplazamiento6}: '{resultado6}'")

texto7 = "ZAÑ"
desplazamiento7 = 1
resultado7 = cifrado_cesar(texto7, desplazamiento7)
print(f"'{texto7}' cifrado con {desplazamiento7}: '{resultado7}'")


Explicación del Código:

  1. Función cifrado_cesar(texto, desplazamiento):
    • Inicializa una cadena vacía resultado para almacenar el texto cifrado.
    • Itera a través de cada caracter en el texto de entrada.
    • Cifrado de letras minúsculas:
      • Si el carácter es una letra minúscula entre 'a' y 'z':
        • Obtiene su posición numérica en el alfabeto (0 para 'a', 1 para 'b', etc.).
        • Aplica el desplazamiento y usa el módulo % 26 para envolver alrededor del alfabeto.
        • Convierte la nueva posición numérica de vuelta a un carácter.
    • Cifrado de letras mayúsculas:
      • Realiza una lógica similar para las letras mayúsculas entre 'A' y 'Z', utilizando ord('A') como punto de referencia.
    • Cifrado de 'ñ' y 'Ñ':
      • Trata la 'ñ' y 'Ñ' como caracteres especiales dentro del alfabeto español de 27 letras. Se calcula su nueva posición teniendo en cuenta el desplazamiento y el módulo 27. Luego, se mapea esa posición de vuelta a una letra del alfabeto español (saltando la 'ñ' en el rango 'a'-'z' o 'A'-'Z' si es necesario para mantener el orden).
    • Otros caracteres:
      • Si el carácter no es una letra del alfabeto español, se añade al resultado sin modificar.
    • Devuelve la cadena resultado cifrada.

Ejemplos de Uso:

Los ejemplos muestran cómo la función cifra diferentes textos en español con varios valores de desplazamiento. Se incluyen casos con mayúsculas, minúsculas, la letra 'ñ', números y símbolos.