Python学习笔记(三)——————加密解密小程序

周五喝茶时间,大家在群里聊天,说到如何在发送点自己群里才懂得秘语,也就是整点密码,给大家的生活里添加点乐子,于是说起来写个加密解密的小程序,虽然网上有很多列表加密的程序了,自己写的这个纯粹用于在聊天时只能用拼音表示的某些词组或单词。
写这个小程序,主要也是为了实践一下之前学的知识,加深记忆,写的不好的,请大家多指点一下
主要用的知识点:
(1)if条件语句的使用
(2)for循环遍历语句的使用
(3)字典的相关知识点
(4)列表的相关知识点

思维逻辑

一开始,对加密解密算法的想法很简单,简单到导图就没几行,下面展示的是一开始的思维导图:
在这里插入图片描述
下面对每一步进行详细:

输入的细化

首先我们想到,在python中,输入的类型时str类型,也就是字符串类型,但是我们需要对每一位的字母进行加密,我先想到的是列表的方式,毕竟列表的调用方便一点(这个也是可以用字符串直接写的,我学艺不精,写完才百度了。是在下太菜了)。另外,考虑到加密解密过程中,考虑到汉子的加密解密太麻烦了(其实也可以利用汉字的ASCII编码进行加密解密,这是我写这个的时候才想到的),不如用字母,毕竟大家拼个拼音方便点。同时大小写字母不影响加密解密,所以这里又将所有的字母转换成小写的方式。但是有的时候大家还会在其中手抖的加入空格,在此基础上,我又添加了去掉空格的这一个想法。于是就有了下面的思维图:
在这里插入图片描述

加密解密的细化

这个地方,我首先想到的是如何确定是加密还是解密,所以在输入的时候要给出系统的提示,帮助判断加密或者解密的过程。之后我们需要一个简单的密码表,确定密码的对应关系,这里采用的是将英文字母左移19位的方式形成对应关系,也就是如下的两个密码表:

pj = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
pl = ['t','u','v','w','x','y','z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s']

之后在解密的过程中,按照运算规则,计算对应的列表角标即可。

输出

将对应好的密码添加到空列表中,并将列表转成字符串输出,形成密文。
在这里插入图片描述

加密解密源码

new_lst=list(input('请输入暗语').replace(" ","").lower())#对输入字母的处理
emima = []
pi = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]
pj = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
pl = ['t','u','v','w','x','y','z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s']
ddic1 = {i:j for i,j in zip(pi,pj)}#密码查询秘钥
edic2 = {j:i for j,i in zip(pj,pi)}#解密秘钥
edic3 = {i:j for i,j in zip(pl,pj)}#加密秘钥
if new_lst[0] == 'e':#判断为加密的过程
    emima.append('d')
    for i in range(len(new_lst)):#加密过程
        if (i>=1)&(i<=(len(new_lst)-1)):
            keymima = edic2[new_lst[i]]
            if keymima <= 7:
                j=keymima+19
                emima.append(ddic1[j])
            elif keymima>7:
                j=keymima-7
                emima.append(ddic1[j])

    print(" " .join (emima))
elif new_lst[0] == 'd':#判断为解密的过程
    emima.append('e')
    for i in range(len(new_lst)):
        if (i >= 1) & (i <= (len(new_lst) - 1)):
            keymima = new_lst[i]
            emima.append(edic3[keymima])

print(" ".join(emima))#将列表转换为字符串进行输出

示例:
在这里插入图片描述

练习小结

对于此次的练习,总结如下:
在这里插入图片描述
对以上的练习和总结,希望大家给出改进的意见。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值