Как зашифровать в 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 читайте здесь