Как зашифровать в Python слова и оставить (игнорировать) числа/спец.символы...?

Помогите плиз. Есть код и он смещает на нужное кол-во цифр буквы исходного текста, но не могу сообразить как сделать" игнорирование спец.символов, пробела"...понимаю, что это что-то из isalpha, isdigit но..

if len(sys.argv) != 2:
    sys.exit("Не верный ключ ")
    
k = int (sys.argv[1])    

def func(string, hren):
    chiper = ''
    for c in text: 
        if c == '':
            chiper = chiper + c 
        elif c.isupper():
            chiper = chiper + chr ((ord(c) + hren - 65)%26 + 65)
        else:
            chiper = chiper + chr ((ord(c) + hren - 97)%26 + 97)
    return chiper'
    
text = input ("Исходный: ")
print ("Шифр:", func(text, k))


Новый!!!

if len(sys.argv) != 2:
    sys.exit("Ошибка")

key = (sys.argv[1])
for k in key:
    if not k.isalpha():
        sys.exit("Ошибка")
        
index = 0
chiper = ""
text = input ("исходный: ")
for c in text:
    if c in string.ascii_lowercase and string.ascii_uppercase:
        offset = ord(key[index]) - ord('a')
        
        encrypted_c = chr((ord(c) - ord('a') + offset) %26 + ord('a'))
        chiper = chiper + encrypted_c
        
        index = (index + 1) % len(key)
        
    else:
        chiper = chiper + c
    
print ("Шифр: " + chiper)



Ответы (2 шт):

Автор решения: n1tr0xs
def func(string, hren):
    chiper = ''
    for c in text: 
        if not c.isalpha(): # если не буква - не меняем
            chiper = chiper + c 
        elif c.isupper():
            chiper = chiper + chr ((ord(c) + hren - 65)%26 + 65)
        else:
            chiper = chiper + chr ((ord(c) + hren - 97)%26 + 97)
    return chiper

Для любителей однострочников можно сделать так:

print(''.join((chr((ord(c) + k - (65 if c.isupper() else 97))%26 + (65 if c.isupper() else 97))) if c.isalpha() else c for c in text))
→ Ссылка
Автор решения: SergFSM

как альтернативу можно использовать регулярку, примерно так:

from re import sub

k = 3

f = lambda m, n=k%26: chr(i-26) if (i:=ord(m[0])+n) > 90+32*m[0].islower() else chr(i)

print ("Шифр:", sub('[a-zA-Z]', f, input ("Исходный: ")))

>>> out
'''
Исходный: TestS #1
Шифр: WhvwV #1

про то как работает sub читайте здесь

→ Ссылка