Как отформатировать вывод программы Ceaser Cipher python - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь сделать простой шифр Ceaser и заставить его работать в основном так, как я хочу. За исключением того, что я хочу сместить только буквы в сообщении, которые являются заглавными, и оставить строчные буквы одинаковыми. Например, если сообщение «HeLLo», программа должна только сдвинуть «H LL» и оставить «eo» таким же. Как показано ниже.

Токовый выход:

Message: HeLLo
Shift: 1
IFMMP

Желаемый выход:

Message: HeLLo
Shift: 1
IeMMo

Код:

plain_text = input("Message: ")
shift = int(input("Shift: "))

def caesar(plain_text, shift): 
  cipher_text = ""
  for ch in plain_text:
    if plain_text.lower():
      plain_text = plain_text

    if ch.isalpha():
      final_letter = chr((ord(ch) + shift - ord('A')) % 26 + ord('A'))
      cipher_text += final_letter
    else:
      cipher_text += ch
  print(cipher_text)
  return cipher_text

caesar(plain_text, shift)

Ответы [ 2 ]

0 голосов
/ 19 марта 2020

Я думаю, вам нужно:

def caesar(plain_text, shift):
    return "".join([chr(ord(i)+shift) if i.isupper() else i for i in plain_text])

caesar(plain_text, shift)
0 голосов
/ 19 марта 2020

Вы можете добавить условие ch != ch.lower(), чтобы проверить, что символ не является строчным, и зашифровать его, только если это не строчный символ.

plain_text = input("Message: ")
shift = int(input("Shift: "))

def caesar(plain_text, shift): 
  cipher_text = ""
  for ch in plain_text:
    if ch.isalpha() and ch != ch.lower():
      final_letter = chr((ord(ch) + shift - ord('A')) % 26 + ord('A'))
      cipher_text += final_letter
    else:
      cipher_text += ch
  print(cipher_text)
  return cipher_text

caesar(plain_text, shift)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...