Python小游戏:凯撒密码
目录
引言
故事
思路分析
代码实现
对代码的分析
信
写在最后的话
引言
古往今来,人们从未停止对信息的获取与对信息的保护(加密)。而在历史上,有一种加密方式广为人知;这种加密方式也给后来的加密方式的产生、发展提供了有益借鉴。“这种加密方式是什么呢?是,凯撒密码。”
“那么,什么是凯撒密码呢?我们怎么去理解它呢?在这篇博文中,也许,你会找到答案。”
故事
……
Caesar: "V'z fbeel gb urne gung lbh'ir pnhtug n pbyq, Pvpreb."
A few days later.
Cicero: "Nsgre erfg n srj qnlf, V sryy zhpu orggre, abj."
……
看了凯撒与西塞罗两人的对话后,是不是觉得云里雾里的呢?感觉,满满火星文的感觉……“那是因为凯撒与西塞罗两人对信的内容进行了加密哦。”
那么,我们有没有办法破解他们的信呢(虽然,这有点不道德。)?
……
思路分析
- 凯撒密码的核心思想,是,依照字母表,对字母进行位次的变换,从而实现对文本的加密。
- 让我们以字母“A”为例。
- 我们知道,英文字母表总共有26个字母,那么,可知,除去“A”后,还剩下25个字母。
- 这样,我们将很容易理解——当将“A”的位次向右移动26位时,我们又回到了初始位置“A”。
- “思考,如果我们只移动13位呢?”
- 将字母“A”向右移动13位,找到字母“N”(有没有发现,字母“N”再向右移动13位,我们就得到字母“A”了呢?)。
- 自然地,以13为密匙,我们能实现字母“A”与字母“N”的相互指代。
代码实现
# -*- coding: utf-8 -*-# Created by Violet. All rights reserved!#%%
# 调用函数库。import time as t#%%
# 创建字母表。Alp = dict()for y in (65,97): # Unicode编码中 "A"&"a" 的编码。for x in range(26): # 遍历26个字母。Alp[chr(x + y)] = chr(((x + 13) % 26) + y)#print(Alp) #%%
# 导入文本,加密/解密。while True:Txt = input("Encrypt or decrypt?")t.sleep(0.3)print("")print("".join(Alp.get(txt,txt) for txt in Txt))t.sleep(0.4)# 继续?print("\nPress Q/q to exit. (*'▽'*)♪")t.sleep(0.4)Ans = input('Que: Shall we continue?')if Ans in {"Q","q"}:breakelse:print("")pass#%%
# To be continued.
对代码的分析
- ……
- 既然要对文本进行加密/解密,那么首先,我们需要有一张字母表(用来转译)。“所以,在加密/解密前,我们要先制作这么一张字母表。”
- 在“Unicode编码”里——“A”的编码为“65”;“a”的编码为“97”。
- “chr()函数”:查找编码对应的字符串;“ord()函数”:查找字符串对应的编码。
- “思考,这么一个问题。”
- 字母表是用来转译用的,其格式为“A”表示“N”,之类的。那么,我们用什么类型(元组?列表?集合?字典?)来做这个字母表呢?字典!
- “授人以鱼不如授人以渔。”所以,对于创建字母表那段代码的理解,还望读者下来思考。
- ……
- Alp.get(txt,txt) for txt in Txt 的意思是——遍历“Txt字符串”里的每一个“txt字符”,用“get()函数”从字母表“Alp”中查找对应值,如果有,返回对应值,没有则返回原来的“txt”值。
- "".join(Alp.get(txt,txt) for txt in Txt) 的意思是,将转译后的字符连接起来(至于引号里为什么没有空格,因为,你输入的文本里已经有空格了,转译的时候空格也有被保留,所以,不需要再加空格了。)
- ……
- 当我们要转译很多的文本时,一次一次地按“F5键”会不会太麻烦呢?麻烦。“所以,我们用了一个 While循环 ,不过,要记得设置退出的路径。”
- 然后,当我们试运行程序时,发现,显示速度有点快,感觉怪怪的,,那么,就让我们使用“时间库time”来帮助我们吧(t.sleep())。
- To be continued.
- ……
信
那么,凯撒与西塞罗两人说了些什么呢?
……
Caesar: " I'm sorry to hear that you've caught a cold, Cicero."
Cicero: "After rest a few days, I feel much better, now."
……
(哔哔警告,打探别人的隐私是个坏习惯。)
写在最后的话
- “合抱之木,生于毫末。九层之台,起于累土。千里之行,始于足下。”
- 我想去北极看极光,我想在撒哈拉沙漠散步,我想在大堡礁潜水,我想去夏威夷,我想打卡自由女神像……“你也有着很多想去的地方吧?那么,让我们下定决心变好。”
Python小游戏:凯撒密码相关推荐
- php实现凯撒密码加密算法,Python实现的凯撒密码算法示例
本文实例讲述了Python实现的凯撒密码算法.分享给大家供大家参考,具体如下: 一 介绍 凯撒密码是一种非常古老的加密方法,相传当年凯撒大地行军打仗时为了保证自己的命令不被敌军知道,就使用这种特殊的方 ...
- Python练习题:凯撒密码 的一种简单解法
在学习Python基本数据类型部分的内容时,字符串部分所含的函数比较多,类型比较复杂.这道凯撒密码的题有多种解法.这里介绍一种解法.设计到了索引.for-in-循环语句.if条件语句.字符串拼接等知识 ...
- python脚本-caeser凯撒密码-rot13
caeser凯撒密码&rot13 import base64# caeser凯撒密码1-27 content = "qiPGS{3apElcg1ba_1f_r4fl}" r ...
- Python编程:实现凯撒密码加密解密
凯撒密码 原理: 通过把字母移动一定的位数来实现加解密 明文中的所有字母从字母表向后(或向前)按照一个固定步长进行偏移后被替换成密文. 例如: 当步长为3时,A被替换成D,B被替换成E,依此类推,X替 ...
- 运用python编写凯撒密码并实现_凯撒密码实现英文短句的加解密
1. 将"We are students."这个英文词句用k=4的凯萨密码翻译成密码 1. 恺撒密码, 作为一种最为古老的对称加密体制,他的基本思想是: 通过把字母移动一定的位数来 ...
- python密码学凯撒密码_凯撒密码在Python
python密码学凯撒密码 Hello everyone, in this tutorial you'll learn about Caesar cipher in Python. If you ha ...
- 《Python游戏编程快速上手》第十四章----凯撒密码
<Python游戏编程快速上手>的第十二章主要讲了笛卡尔坐标系的基本数学知识,我就不重现了:然后第十三章主要是一个笛卡尔坐标系的小应用,这个小应用也是非常简单的,所以我就不重现了. 今天主 ...
- Python 零基础入门到实战(一)笔记:内置对象、浅拷贝、深拷贝、计算圆面积、凯撒密码、英文大小写转换、输入国家打印出国家名和首都、输入数字英文输出、统计句子中的字母数量、猜随机数
Python入门到实战(一) 为什么写这篇文章 Part 1 入门部分 什么是编程语言? Python的优势 目前应用 特点 Part 2 6种内置对象 1 整数.浮点数 2 字符串 3 列表 4 元 ...
- python凯撒密码详解_Python基础题目集--课堂案例
这些案例均为在校期间学习<python基础编程>课程的案例,适合初学者练手~ 1.输入分数,返回等级 ''' 分数区间为0~100,等级:A(>=90).B(>=80).C(& ...
最新文章
- iOS点击空白收回键盘
- 简单易学的python自动化办公教学视频-Python自动化办公之操作Excel文件
- linux安装jdk教程
- nginx自定义模块编写-实时统计模块--转载
- 每天数十亿次请求的应用经验分享,值得参考!
- C语言编程的Debug版和Release版
- 水阀门开关方向图解_低压阀门开闭器
- 概率论-3.4 多维随机变量的特征数
- ubuntu12.04安装及配置过程详解1
- linux如何调试elf程序,Linux应用程序elf描述
- 记一次 IIS 7.0 身份验证相关的问题解决
- 实例分解神经网络反向传播算法(转)
- 首次运行 tensorflow 项目之 vgg 网络
- java实现模拟考试系统_基于JAVA SWING考试模拟系统.doc
- 中国饭局上的座次讲究
- 繁华落尽——王思聪的熊猫直播之死,是腾讯对360的又一次胜利
- 访问文件服务器电脑卡死,客户机访问服务器的共享文件会卡死
- linux识别riser卡,Riser卡和PCIe槽位
- uni-table单元格中预览图片:阻止冒泡
- 微信小程序使用iconfont阿里矢量多色图标