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.
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:
- 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.