Как оставить пунктуацию без изменений в Цезарь Шифр? - питон - PullRequest
0 голосов
/ 13 января 2019

У меня проблемы с попыткой оставить пунктуацию без изменений при шифровании или дешифровании сообщения

# encryption
message = input("Enter a message to be encrypted: ") # user inputs message to be encrypted
offset = int(input ("Enter an offset: ")) # user inputs offset
print ("\t")

encrypt = " " 

for char in message:
    if char == " ":
        encrypt = encrypt + char
    elif char.isupper():
        encrypt = encrypt + chr((ord(char) + offset - 65) % 26 + 65) # for uppercase Z
    else:
        encrypt = encrypt + chr((ord(char) + offset - 97) % 26 + 97) # for lowercase z

print ("Your original message:",message)
print ("Your encrypted message:",encrypt)
print ("\t")

Пример того, как будет выглядеть вывод, если я попытаюсь зашифровать сообщение с пунктуацией (смещение 8):

Your original message: Mr. and Mrs. Dursley, of number four Privet Drive, were proud to say that they were perfectly normal, thank you very much.
Your encrypted message:  Uzj ivl Uzaj Lczatmgh wn vcujmz nwcz Xzqdmb Lzqdmh emzm xzwcl bw aig bpib bpmg emzm xmznmkbtg vwzuith bpivs gwc dmzg uckp

Я подозреваю, что эта программа меняет знаки препинания на буквы из-за chr(ord(char)) функция.

Можно ли каким-либо образом добавить фактическую пунктуацию к зашифрованному сообщению, не меняя слишком много кода? Буду очень признателен за любую помощь, спасибо!

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Так же, как вы делаете это с пробелом, вы можете сделать это с любым символом.

if char in string.punctuation+' ':
        encrypt = encrypt + char
0 голосов
/ 13 января 2019

Вы можете получить желаемый результат всего за одну смену строки, обработав все не-буквенные символы в первом условном выражении, используя isalpha()

# encryption
message = input("Enter a message to be encrypted: ") # user inputs message to be encrypted
offset = int(input ("Enter an offset: ")) # user inputs offset
print ("\t")

encrypt = " " 

for char in message:
    if not char.isalpha(): #changed
        encrypt = encrypt + char
    elif char.isupper():
        encrypt = encrypt + chr((ord(char) + offset - 65) % 26 + 65) # for uppercase Z
    else:
        encrypt = encrypt + chr((ord(char) + offset - 97) % 26 + 97) # for lowercase z

print ("Your original message:",message)
print ("Your encrypted message:",encrypt)
print ("\t")
...