扩展到可视字符

任务描述
  之前程序只能处理 26 个小写英文字母,而不支持其它字符,如大写字母、数字、标点等。但这些字符在实际使用中也会大量出现,需要进行支持,才能更好的保护信息。
  本关任务是对凯撒加密方法进行扩展,使其能够进一步处理其它英文字符。
相关知识
可视字符

  实际上,在 ASCII 编码表中总共包含 95 个可视字符,即下图红框中的字符。可视字符是能够在屏幕上显示出来,或者说能看得见的字符。剩下的 33 个字符是控制字符,是看不见的,如删除符、换行符等。

在这里插入图片描述
可视字符基本上涵盖了所有常见的英文字符,包括大小写字母、数字、标点、特殊符号等。如果能对所有可视字符进行加密,就能满足英文文本的需要了。

算法扩展
  观察一下,跟之前 26 个小写字母类似,在 ASCII 编码表中,这 95 个可视字符也是连续排列的。第一个字符是空格’ ‘、最后一个是波浪号’~’。
  所以,也可以用循环偏移的方法对可视字符进行加密,过程跟之前一样,只不过字符从原来的 26 个小写字母扩展到 95 个可视字符。具体来说,在之前程序的基础上,进行如下改动,就可以使程序支持所有可视字符:
  1)修改首个字符对应的 ASCII 码;
  2)将支持的字符总数改为 95;
  3)在对文本中某个字符x加密时,要先判断能否加密,之前的判断条件是看x是否为小写英文字符,而现在应改为看x是否为可视字符。

编程要求
  Begin-End 区间给出的是第 3 关的过关程序,能够对所有小写英文字母进行凯撒加密。修改代码,使其能够支持所有可视字符。
  过关后,可以尝试一下解密过程。

测试说明
  例如,测试集 1 的输入为:

Attack Tonight!

测试集 1 的输出为(大写字母、空格、标点都能加密):

Attack Tonight! -> Cvvcem"Vqpkijv#

开始你的任务吧,祝你成功!

########## Begin ##########
firstASCII = ord(' ') #首个字符的ASCII码
N = 95                #支持的字符总数

def enChar(x, key):
    xid = ord(x)-firstASCII
    yid = (xid+key) % N
    y = chr(firstASCII+yid)
    return y

def Caesar(text, key):
    result = ''
    for x in text:
        if ' '<=x<='~': #若x是可视字母
             x = enChar(x,key)
        result = result + x
    return result

key = 2 #密钥
text = input()
enText = Caesar(text, key)
print('%s -> %s' % (text, enText))
########## End ##########

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值