赛题介绍

挑战介绍

  • 清末,电报技术进入中国。上海大北水线电报公司在 1871 年选用了六千八百九十七个汉字,代以四码数字,编写成了中国最早的电报明码本。为了传输的内容可以保密,又设计出了将明码本加密的方法,于是就有了比较复杂的密码。后来,这种加密技术被应用在军事和商业情报机构中。
  • 加密的具体方法是:例如“布”这个字的电报电码为 1530,加密和减密的钥匙均为 9853。先用明码的四个数字分别与加密钥匙的四个数字相加,例如第一位数相加  1 + 9 = 10 ,凡 10 都作  0 ;第二位数相加  5 + 8 = 13 ,隐去 10,只作  3 ;第三位数相加  3 + 5 = 8 ;第四位数相加(如果是 0,则作 10 )  10 + 3 = 13 ,隐去 10,只作  3 。那么“布”的明码 1530 就成了密码 0383。解密时相反,使用密码减去解密钥匙的四个数字,即可获得明码,从而找到对应的文字。

挑战目标

补充文件  plain_code.py  下  plain_code_encryption(numb)  函数中的 TODO 部分,使其实现我们需要的功能:

  • 输入一个 0 - 9999 (包含 0 和 9999)之间的任意数,然后加上 9853,相加之后得到一个 4 位数(str 格式)并返回。
  • 如果传入的数字不足 4 位,则缺失位置以 0 填补。例如输入数字为 32,则需要当作 0032。
  • 相同位置的数字进行相加,如果相加之后大于等于 10,则隐去 10,只保留个位位置的数字。
  • 如果输入的数字不在 0 - 9999 之间,则返回  None
def plain_code_encryption(numb: int) -> str:"""TODO"""encryption_text : str = ''return encryption_text

挑战要求

  • 题目需使用 Python3 完成,不能使用标准库和第三方库。
  • 函数传入 numb 为整型类型,可能为 -1、11111 等值。
  • 不得修改文件路径、文件名  plain_code.py  以及函数名 plain_code_encryption(numb)
  • 请只保留文件  plain_code.py  及文件中函数,不要添加测试或执行代码,避免检测时出错。
  • 线上环境调试代码时,请使用  python3 plain_code.py  命令调用 Python3。

参考样例

# 样例 1
numb = 1530; encryption_text = "0383"
# 样例 2
numb = 0; encryption_text = "9853"
# 样例 3
numb = 12345; encryption_text = None

注意:最终实现效果以完全满足要求为准,而不是仅满足如上样例。


题解

解题思路

简单的模拟题

  1. 要注意对传入参数长度的检查。
  2. 利用模运算符进行取余运算获取余数。
  3. 最后使用join方法将列表拼接为字符串返回即可。
def plain_code_encryption(numb: int) -> str:"""TODO"""result = []crypt = "9853"if not 0 <= int(numb) <=9999:return Nonestr_numb = str(numb)str_numb = str_numb.rjust(4,'0')for index, value in enumerate(str_numb):if (int(value) + int(crypt[index])) < 10:result.append(str(int(value) + int(crypt[index])))else:result.append(str((int(value) + int(crypt[index])) % 10))encryption_text : str = ''.join(result)return encryption_text

题目来源:蓝桥 明码加密

蓝桥 卷“兔”来袭编程竞赛专场-07明码加密 题解相关推荐

  1. 蓝桥 卷“兔”来袭编程竞赛专场-05棋盘加密 题解

    赛题介绍 挑战介绍 棋盘密码是一种坐标加密法.棋盘密码通过将 26 个字母设法变成十位数来达到加密的目的,密钥是一个 5×5 的棋盘,将 26 个英文字母填在棋盘的格子里,其中 i 和 j 在同一个方 ...

  2. 蓝桥 卷“兔”来袭编程竞赛专场-04栅栏加密 题解

    赛题介绍 挑战介绍 栅栏密码是一种简单的移动字符位置的加密方法,规则简单.加密方式是将明文按照一定的字数分成多个组,取每组第一个字连起来得到密文 1,再取每组第二个字连起来得到密文 2,以此类推,最后 ...

  3. 蓝桥 卷“兔”来袭编程竞赛专场-10仿射加密 题解

    赛题介绍 挑战介绍 仿射密码结合了移位密码和乘数密码的特点,是一种替换密码.它是利用加密函数一个字母对一个字母的加密.加密函数是 y=ax+b(mod m) ,且 a,b∈Zm (a.b 的值在 m ...

  4. 蓝桥 卷“兔”来袭编程竞赛专场-06姜子牙阴书加密 题解

    赛题介绍 挑战介绍 姜子牙阴书密码是将一封完整的书信分割成三份,然后由三个送信者各送一份,收信人收到三份书信后再合并成一封完整的情报.如此,即使某个信使被敌军抓获,敌军也不会获得完整的情报. 但是如果 ...

  5. 蓝桥 卷“兔”来袭编程竞赛专场-09凯撒加密 题解

    赛题介绍 挑战介绍 恺撒密码也称恺撒加密.恺撒变换.变换加密,是一种最简单且最广为人知的加密技术.采用的是替换方法对信息中的英文字符循环替换为字母表序列中该字符后面或前面的第 N 个字符.例如当  N ...

  6. 蓝桥 卷“兔”来袭编程竞赛专场-08列置换加密 题解

    赛题介绍 挑战介绍 列置换加密是明文以每行固定字数(key 的字母种类数,一般情况下 key 会选择字母不重复的单词)一行一行写下,如果最后一行字数小于每行的固定字数,则使用特殊符号补充,这样就形成了 ...

  7. 蓝桥 卷“兔”来袭编程竞赛专场-02破解曾公亮密码 题解

    赛题介绍 挑战介绍 曾公亮编撰的<武经总要>中记载了一套严谨的军事通信密码,这也是目前发现我国古代战争中最早使用的军用密码表.将战场上可能常用到的情况,用 40 个短语归纳表示,且每个短语 ...

  8. CSDN 编程竞赛二十四期题解

    竞赛总览 CSDN 编程竞赛二十四期:比赛详情 (csdn.net) 本次竞赛感觉打模板的题变少了,而且多了很多可以集思广益的题目,参赛体验很好. 竞赛题解 题目1.计数问题 试计算在区间1到n的所有 ...

  9. CSDN 编程竞赛二十八期题解

    竞赛总览 CSDN 编程竞赛二十八期:比赛详情 (csdn.net) 本期竞赛的题目都很简单,但是非常考验读题和编码速度.这一次没有遇到bug,竞赛体验较好. 竞赛题解 题目1.小Q的鲜榨柠檬汁 团建 ...

最新文章

  1. ipykernel_launcher.py: error: unrecognized arguments: -f /Users/apple/Library/Jupyter/runtime/kernel
  2. TinyML-TVM是如何驯服Tiny的(下)
  3. CVPR2020最新论文扫描盘点(上)
  4. BCH代币化方案讨论大爆发,你的观点是什么?
  5. Python实现打印螺旋矩阵功能的方法
  6. chrome插件开发
  7. java如何获取一个double的小数位数
  8. normalize函数_Pandas 数据处理(一) —— 几个简单函数掌握!
  9. 微信小程序启动、更新机制
  10. DartWeb基础—简单入门
  11. Settings点击Location(位置)后右上角的开关button不会消失
  12. 会java c php三种语言_php java net三种语言的区别
  13. Spring Boot入门(5)表单验证
  14. 遗传算法的原理与python实现
  15. 机器人操作系统ROS浅析
  16. 转载:LTE中的各种ID含义
  17. keras深度学习(3)-单标签多分类问题之新闻分类
  18. OS-练习题(10~13)
  19. 华兴数控g71外圆循环编程_华兴数控的循环指令是怎么定义的。也就是G71。G72。那样的。...
  20. JS事件详解和js事件委托

热门文章

  1. 20个强大的正则表达式
  2. 如何将卫星影像或者航拍影像叠加到CAD设计图上(Auto CAD版)
  3. CHB-MIT波士顿儿童医院癫痫EEG脑电数据处理(二)
  4. php测试教程,PHP单元测试基础教程
  5. Smali语法学习三
  6. html设置点击变换图标,【css】css实现点击Toggle功能/icon切换
  7. Adobe Acrobat XI Pro闪退问题解决办法
  8. java设计随机遇敌概率_Java随机产生中文昵称
  9. UTS安装与卸载-Linux篇
  10. MacOS下无屏幕通过共享WiFi的方式为树莓派4B安装64-bit系统