Цезарь Сайпер Питон

#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. Я не уверен, что числа зашифрованы шифром Цезаря. Следует уточнить в ОП