#python
Вопрос:
def caesar_encript(txt, shift):
chiper = ""
for i in range(len(txt)):
char = txt[i]
if char == " " :
chiper = ' '
elif (char.isupper()):
chiper = chr((ord(char) shift - 65) % 26 65)
elif (char.islower()):
chiper = chr((ord(char) shift - 97) % 26 97)
return chiper
def caesar_decript(chiper, shift):
return caesar_encript(chiper, -shift)
msg = 'Random Mesage, WOOOWW!'
cpr = caesar_encript(msg,4)
txt = caesar_decript(cpr,4)
print('plain text : ', txt)
print('chiper text : ', cpr)
Я создал код для шифрования, но на выходе не отображаются специальные символы, и я хочу, чтобы специальные символы отображались без шифрования
Ответ №1:
Грубым решением было бы заменить это
if char == " " :
chiper = ' '
с этим
if not char.isalpha():
chiper = char
Ответ №2:
Специальные символы не учитываются, потому что они также шифруются. При таком подходе условие if ставится перед условием, при котором isalnum()
шифруются только буквенно-цифровые символы.
def caesar_encript(txt, shift):
chiper = ""
for i in range(len(txt)):
char = txt[i]
if not char.isalnum():
chiper =char
else:
if (char.isupper()):
chiper = chr((ord(char) shift - 65) % 26 65)
elif (char.islower()):
chiper = chr((ord(char) shift - 97) % 26 97)
Выход
plain text : Random Mesage, WOOOWW!
chiper text : Verhsq Qiweki, ASSSAA!
Комментарии:
1. Это сложная структура. Это может быть просто
else
вisupper
islower
соответствии с условиями/…2. Я не совсем уверен, что понимаю. Вы имели
else
в виду, что это не требовалось, иisupper/islower
это может бытьelif
условием?3. Трудно опубликовать код в качестве комментария, но я имел в виду, что это может быть просто:
if char.isupper: chiper = ... elif chat.islower: chiper = ... else: chiper = char
. Надеюсь, это прояснит ситуацию4. О да, понял. Но разве это условие не будет игнорировать сообщения с цифрами в нем? Я знаю, что текущий код предназначен только для символов, но если возникнет такой случай, он не будет зашифрован.
5. Я не уверен, что числа зашифрованы шифром Цезаря. Следует уточнить в ОП