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
Ricard 10 Окт 2021 в 11:39

2 ответа

Лучший ответ

Грубым решением было бы заменить это

if char == " " :
    chiper += ' '

С этим

if not char.isalpha():
    chiper += char
1
Alexey Larionov 10 Окт 2021 в 08:44

Специальные символы не учитываются, потому что они также шифруются. Этот подход помещает условие 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!
0
vnk 10 Окт 2021 в 08:45