繁体   English   中英

凯撒密码中的标点符号如何保持不变? -Python

[英]How to leave punctuation unchanged in Caesar Cipher? - Python

我在加密或解密邮件时尝试保持标点符号不变时遇到了麻烦

# 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))函数,此程序会将标点符号更改为字母。

有什么方法可以在不对代码进行太多更改的情况下,将实际标点符号添加到加密邮件中? 我真的很感谢您的帮助,谢谢!

通过使用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")

与使用空格相同,您可以使用任何字符。

if char in string.punctuation+' ':
        encrypt = encrypt + char

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM