Improvements with caesar cipher encryption I have wanna learn more of ways to improve my code and also, make it look different. I want to see different approach but have the same result.

def text():
    print('What message(s) are you trying to encrypt?')
    return input()

def shift():
    key = 0;
    while True:
        print('Enter the key number (1-%s)' % (keymax))
        key = int(input())
        if (key &gt;= 1 and key &lt;= keymax):
            return key

def encrypt(string, shift):
    hidden = ''
    for char in string:
        if char.isalpha() == False:
            hidden = hidden + char
        elif  char.isupper():
            hidden = hidden + chr((ord(char) + shift - 65) % 26 + 65)
        else:
            hidden = hidden + chr((ord(char) + shift - 97) % 26 + 97)

    return hidden

text = text()
s = shift()

print("original string: ", text)
print("after encryption: ", encrypt(text, s))


It would be gladly appreciated if anyone could lend a hand or help out! :)
Just a couple of small things you could improve/change on your code:


Unnecessary function/print statement. You can just do text = input('What message ... encrypt?\n') instead of making an extra function for it an using a seperate print statement.
The same goes for the input statement in the shift function, you can put the text of the print statement inside of the input. 
Unnecessary default value for variable.
In the shift function you assign the value 0 to the variable key on forehand. But as you never use it outside the while True statement this is unnecessary. This line can be removed.
'Magic numbers'. Inside the encrypt function you use the ascii codes 65, 26 and 97 to quickly convert the characters. While their meaning might be obvious to you (and in this trivial case to most people) it is never a good idea to do this. It is cleaner to make a variable on top of your program in uppercase defining the value. So something like: UPPER_ASCII_SHIFT = 65 and then using that variable in the rest of the code. This way it is much easier to read for someone else. This is also a big theme in the cs50 course where this programming problem is originally from. 
Try choosing clearer names for variables that immediately clarify their use and content. Something like hidden is a bit ambiguous, maybe encrypted_string is better? Also try to avoid single letter variable names like s, but rather call it something like shift_distance.