Caesar Cipher Python - Características adicionales

Así que actualmente, mi código se ve así (gracias por ayudar en otra publicación que hice)

phrase = raw_input("Enter text to Cipher: ")
shift = int(raw_input("Please enter shift: "))
result = ("Encrypted text is: ")

for character in phrase: 
     #Loops through phrase and shows ascii numbers, example: hello is: 104,101,108,108,111
    x = ord(character)

     #adds a shift to each character so if shift is 1 'hello' becomes: ifmmp 105,102,109,109,112
    result += chr(x + shift)


print "\n",result,"\n"

El problema es que si escribo más de una palabra, por ejemplo: hola mundo, con un cambio de 1

la salida es:ifmmp!xpsme

El signo de exclamación aparece para un espacio (varía según el turno). Estaba pensando en hacer una sentencia if para detectar espacios:

phrase = raw_input("Enter text to Cipher: ")
shift = int(raw_input("Please enter shift: "))
result = ("Encrypted text is: ")

for character in phrase: 
        #Loops through phrase and shows ascii numbers, example: hello is: 104,101,108,108,111
    x = ord(character)

    if x == ord(' '):
        print "\nfound a space space"

        #adds 1 to each character so 'hello' becomes: ifmmp 105,102,109,109,112
    result += chr(x + shift)


print "\n",result,"\n"

Pero no sé cómo agregar el espacio en la variable de resultado. Además, he visto en este hilo:Cifrado de César usando python, podría usar un poco de ayuda

Ese JeffB usó un bucle while para tratar con la tabla ASCII 32 siendo espacio y 127 siendo DEL. ¿Por qué usó el 96? No entiendo.

while x < 32:
    x += 96

while x > 127:
    x -= 96

Lo siento, esta pregunta es bastante larga. ¡Muchas gracias de antemano! Tu ayuda es invaluable para mí.

Respuestas a la pregunta(4)

Su respuesta a la pregunta