如何格式化 Caesar Cipher 程序的输出 python

How to format output of Ceaser Cipher program python

我正在尝试制作一个简单的 Ceaser 密码并让它主要按照我想要的方式工作。除了,我只想移动消息中的大写字母并保持小写字母不变。例如,如果消息是 "HeLLo",程序应该只移动 "H LL" 并保持 "e o" 不变。如下图

当前输出:

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)

您可以添加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)

我认为你需要:

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)