目标

  1. 找一段比较长的文本(文本是以.txt文件形式存在的)
    NOTE:频率法适用于较大样本

  2. 打开文件,读取字符形成字符串( python文件函数
    处理成只包含小写字母的字符串 (用re的函数

  3. 统计这段字符串中的字母频率

  4. 将这个频率和自己查找到的频率表对照,看看差异。

  5. 乱序法加密这个字符串,用标准频率表中的对应次序来解密。
    一般都会得到若干个正确单词,但完全碰对的可能性不大。

  6. 输出解密文件

找一段比较长的文本

从global times环球时报上摘取了一个报道

文件处理

由于是字符操作,字符串属于不可变对象,因此返回新的对象

dat = open('EnglishSample.txt','r')
sample = dat.read()
dat.close()
sample = sample.lower()#lower 方法返回的是一个新的字符串
sample = re.sub('[\W\d]+','',sample)
#将第一个模式替换为第二种字符串,作用在第三个变量
#同样返回一个新的字符串

清洗后不含有空格并且没有大写字母

字母频率统计&频率表

def frequencyDict(sample):rDict = {}strlen = len(sample)for i in sample:if i in rDict:rDict[i] += 100.0/strlen#百分制词频else:rDict[i] = 1.0/strlenreturn rDict

另一种统计方法(直接使用字符串内置方法count)

for i in alpha:v3.append(100.0*secret.count(i)/len(secret))#统计加密后词频

在某个网站找了频率表
然后手动录入

stdDict = {'e':12.02,'t':9.10,'a':8.12,'o':7.68,'i':7.31,'n':6.95,'s':6.28,'r':6.02,'h':5.92,'d':4.32,'l':3.98,'u':2.88,'c':2.71,'m':2.61,'f':2.30,'y':2.11,'w':2.09,'g':2.03,'p':1.82,'b':1.49,'v':1.11,'k':0.69,'x':0.17,'q':0.11,'j':0.10,'z':0.07}

图表展示

一个尴尬的展示方法

如果按照值排列,就会看不明白字符顺序

改良之后

采用字母表正常顺序,观察词频的差异
虽然图片依旧比较丑,但是可以观察到词频区别
红色为网上查到的词频

plt.rcParams['font.sans-serif']=['SimHei']
plt.title('词频表红线是网络版')
plt.plot(k1,v1,'r')
plt.bar(k1,v2)
plt.show()

加密

根据字典加密(同理可以解密)

def transfer(instr, code):temp = []for i in range(len(instr)):temp.append(code[instr[i]])outstr = ''.join(temp)return outstr

另外为了便于排序字典(我也不知道为什么当初要研究这个)
我研究了一下sort方法和lambda表达式
将字典转换为键值对列表
sort方法
匿名函数
可以选择按照键排序或者按照值排序,返回排好的键&值两个列表

def sortDict(rDict,k,v,key=0):raw = list(rDict.items())raw.sort(key = lambda d:d[key])for i in raw:k.append(i[0])v.append(i[1])

解密结果

Bent over a barrel, Greek microbrewer Sophocles Panagiotou lovingly draws a measure of his Septem Red Ale into a glass cylinder and expertly transfers it to a glass.
……
gernokeatgtaaeuyaeevcilaogaebeasowholueswtrtyionomuokiryupdatbs
……
惨不忍睹

总结

  1. 写代码之前一定先策划好变量与函数(即使python很重要的是使用库函数)
  2. 代码重用非常重要,不要出现复制粘贴的想法(两个函数有共同功能要再分拆)
  3. 变量名要不仅有代表性,而且要先策划,否则一堆encodeXX的变量名还是看不明白
  4. 破窗效应,如果有一段很烂的代码,会导致心态爆炸胡写下去,所以开始不要写的乱
  5. python编程中遇到的问题往往是有可以满足需求的函数,但是数据类型不是很方便,所以写起来总是有削足适履的感觉

乱序字典加密解密python基础知识综合应用相关推荐

  1. Python写入字典_干货|python基础知识总结

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 Python是一种面向对象的解释型计算机程序设计语言.它有着代码简洁.可读性强的特点. ...

  2. Python基础知识、基本概念、下载python和pycharm、列表、元组、字典等等

    先看后赞,养成习惯.点赞收藏,人生辉煌! 目录 1.Python基础知识 1.1 基本概念 1.2 下载python和pycharm 1.3 格式化输出 1.4 键盘输入 1.5 运算符和表达式 2. ...

  3. Python基础知识笔记

    文章目录 Python基础知识 教程:https://www.liaoxuefeng.com/wiki/1016959663602400 内置函数:https://docs.python.org/3/ ...

  4. Python基础知识与常用数据类型

    Python基础知识与常用数据类型 目录 Python基础知识与常用数据类型 一.Python概述: 二.Python中的基础语法: 三.Python内置数据结构: 4.附录 一.Python概述: ...

  5. Python基础知识总结(期末复习精简版)

    文章目录 知识汇总 前言 推荐的学习资料 复习要点 组合数据类型 序列类型通用操作符和函数 集合类型 映射类型 数值操作 运算符 字符串操作 字符串切片 基本切片操作 高级切片操作 操作.相关函数.相 ...

  6. 一、 Python 基础知识笔记 —— 《Python编程:从入门到实践(第二版)》学习笔记

    前言 先安利这本书<Python编程:从入门到实践(第二版)>,作者埃里克-马瑟斯,很适合新手入门,我的python入门学习就是以这本书为核心: 再安利一个网站:菜鸟教程-Python3教 ...

  7. python基础知识有哪些需要背(记住是基础知识)我是初学者

    大家好,小编来为大家解答以下问题,一个有趣的事情,一个有趣的事情,今天让我们一起来看看吧! 1.python基础知识有哪些需要背(记住是基础知识)我是初学者 或看好Python的广阔前景,或看中Pyt ...

  8. 1、Python 基础知识总结

    1.Python 简介 Python 是一门简单易学的,面向对象的,解释型的脚本语言,也是一种开源的.可移植性强的.可扩展性强的高级编程语言,常用于科学计算与人工智能.WEB 开发.金融.云计算等领域 ...

  9. Python基础知识总结

    1. Python基础知识 1.1  Python历史 1.1.1 Python起源 Python的作者,Guido von Rossum,荷兰人.1982年,Guido从阿姆斯特丹大学获得了数学和计 ...

最新文章

  1. Docker Toolbox:Docker Toolbox的简介、安装、使用方法之详细攻略
  2. SAP中服务性订单的替代解决方案
  3. tea java 代码,TeaVM编译器如何将Java应用程序转换为Javascript,以及如何使用MicroK8管理嵌入...
  4. 牛腩新闻发布系统(一):SQLHelper重构(一)
  5. 安装kali linux 2017.1 【二、安装VMware-tools 以及相关问题处理】
  6. 洛谷P2014【树形dp】
  7. as常用固定搭配_人民日报整理:英语常用介词固定搭配,太实用了!
  8. centos 7 8安装quaartus 遇到的问题及解决方法
  9. Openresty 学习笔记(二)Nginx Lua 正则表达式相关API
  10. 离线数据系统之oozie详解
  11. 物料搬运设备中的链条和链轮的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  12. Linux-文件打开数配置实践
  13. Redis基础知识 底层数据结构的实现 redis中的对象概念
  14. WPS网盘怎么显示在我的电脑里?
  15. GitChat 是一个怎样的产品?
  16. android官方转圈圈,android 弹出之后,一直转圈圈??
  17. lol服务器维护8月7,LOL8月7日更新维护到几点 英雄联盟8.7更新了哪些内容
  18. 利用matlab进行三维曲线拟合(cftool工具箱实现)
  19. loadrunner入门篇 - Vuser发生器
  20. 听说要发年终奖了,来来来,我们互相伤害

热门文章

  1. 如何让谷歌浏览器支持小字体?
  2. 全面虚拟化应用监测系统-明辰智航云安
  3. Ubuntu 20.04从安装到配置全套避坑指南
  4. 如何快速的把图片转换为PDF文件格式
  5. RFID固定资产管理解决方案,RFID资产管理,RFID手持终端-新导智能
  6. 动态加载laydate 失效_【技术帖】弹簧制动缸支架失效分析与解决方案
  7. 金相图像处理 matlab,MATLAB图像处理在铸铁材料金相分析中的应用
  8. 铁道部官网如何体现了互联网思维?
  9. php api接口验证签名错误,API常用签名验证方法(PHP实现)
  10. 远程用计算机加共享打印机,如何在远程桌面上使用本地打印机