Implementa el cifrado César: desplazar letras un número fijo de posiciones. Ideal para practicar strings, ASCII/Unicode y validación.
Implementar el cifrado César en Python

El cifrado César es un cifrado por sustitución muy simple: cada letra se desplaza n posiciones. No es seguro hoy en día, pero es perfecto para aprender.

1) Función de desplazamiento

def shift_char(ch, k):
    if "a" <= ch <= "z":
        base = ord("a")
        return chr((ord(ch) - base + k) % 26 + base)
    if "A" <= ch <= "Z":
        base = ord("A")
        return chr((ord(ch) - base + k) % 26 + base)
    return ch  # números, espacios, símbolos...

2) Cifrar y descifrar

def caesar_encrypt(text, k):
    return "".join(shift_char(ch, k) for ch in text)

def caesar_decrypt(text, k):
    return "".join(shift_char(ch, -k) for ch in text)

3) Prueba rápida

msg = "Hola Mundo!"
c = caesar_encrypt(msg, 3)
p = caesar_decrypt(c, 3)
print(c)  # Kród Pxqgr!
print(p)  # Hola Mundo!