我的输出进入非字母值 python 3.4 凯撒密码

my output goes into non alphabetic values python 3.4 caesar cipher

user_m = input('enter message:')
user_k = int(input('enter offset key:'))

message = ''

for a in user_m:
    r = ord(a)
    r += user_k
    message += chr(r)
print (message)

此代码通过将偏移密钥添加到消息来加密消息。它工作正常,但问题是输出有时会变成非字母值,有时不准确,例如

enter message:zyxabc
enter offset key:24
yz{

这是它何时起作用的示例

enter message:hello
enter offset key:5
mjqqt

如何让所有字符按字母顺序排列?

这是@abarnet 在评论中建议的第一个解决方案:

def encrypt(message, shift):
    new = ''
    for i in (ord(x) for x in message): #gets the ascii value of each letter in message
        if 64 < i < 91: #uppercase
            new += chr(65 + (i+shift-65)%26)
        elif 96 < i < 123: #lowercase
            new += chr(97 + (i+shift-97)%26)
    return new

def decrypt(message, shift):
    return encrypt(message, 26-shift)