100个python算法超详细讲解:数据加密

完整版下载超详细Python算法案例讲解100例.zip-Python文档类资源-CSDN下载

1.问题描述
某个公司采用公用电话来传递数据,传递的数据是4位的整数,且要求
在传递过程中数据是加密的。数据加密的规则为:将每位传递的数字都加上
5,之后用和除以10的余数来代替该数字,最后将第一位和第四位数字交
换,第二位和第三位数字交换。
要求通过程序实现数据加密的过程。
2.问题分析
解决该问题只要按照题目中给出的数据加密规则编程即可。
3.算法设计
该问题需要进行数据拆分,将拆分后各位上的数字存放在一个一维数组
中。
对拆分后的各位数字应用加密规则时,可使用for循环结构来实现。
4.确定程序框架
(1)数据拆分
定义变量n,用于存放要传递的数据。定义数组s[4],用于存放拆分后的
各位数字。拆分的代码如下:

# 获取各位上的数字
s[0] = n % 10 # 将个位存入s[0]
s[1] = n % 100 // 10 # 将十位存入s[1]
s[2] = n % 1000 // 100 # 将百位存入s[2]
s[3] = n // 1000 # 将千位存入s[3]

2)数据加密
数据加密过程采用两个for循环来实现,具体如下:

for i in range(0, 4):
s[i] += 5 # 各位上的数字加5
s[i] %= 10 # 除以10取余
# 数字交换,1、4位交换,2、3位交换
for i in range(0, (3 // 2) + 1):
# 数字交换
t = s[i]
s[i] = s[3 - i]
s[3 - i] = t

程序流程图如图12.3所示。

5.完整的程序
根据上面的分析,编写完整的程序如下:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @author : liuhefei
# @desc: 数据加密问题
def encry(n):
# 获取各位上的数字
s[0] = n % 10 # 将个位存入s[0]
s[1] = n % 100 // 10 # 将十位存入s[1]
s[2] = n % 1000 // 100 # 将百位存入s[2]
s[3] = n // 1000 # 将千位存入s[3]
for i in range(0, 4):
s[i] += 5 # 各位上的数字加5
s[i] %= 10 # 除以10取余
# 数字交换,1、4位交换,2、3位交换
for i in range(0, (3 // 2) + 1):
# 数字交换
t = s[i]
s[i] = s[3 - i]
s[3 - i] = t
# 输出加密后的数据
i = 3
while i >= 0:
print("%d" % s[i], end="")
i -= 1
if __name__ == "__main__":
s = [0]*4 # 数组s用来存放生成的4位数
n = int(input("请输入将要传递的四位整数:"))
encry(n)

 6.运行结果
在PyCharm下运行程序,结果如图12.4所示。在图12.4a中,输入的数据
为1356,加密后的数据为1086;在图12.4b中,输入的数据为8295,加密后的
数据为0473。

 7.问题拓展
本题中的数据拆分还可以使用循环结构来实现。下面的代码使用了while
循环结构来拆分数据,拆分后的数据同样保存到s数组中。

i = 0
while n % 10 > 0 and i < 8:
s[i] = n % 10
n = n // 10
i += 1
count += 1

该题还可以进行修改,如要求用电话传输的数据位数小于8位,且数据
加密规则为:将每位传递的数字都加上5,之后用和除以10的余数来代替该
数字,最后将第一位和最后一位数字交换。
此时需要定义数组s[8]并定义变量count用于记录输入的数据位数。完整
的程序代码如下:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @author : liuhefei
# @desc: 数据加密问题
def encry(n, count):
i = 0
while n % 10 > 0 and i < 8:
s[i] = n % 10
n = n // 10
i += 1
count += 1
i = 0
for i in range(count+1):
s[i] += 5
s[i] %= 10
# 交换第一位和最后一位数字
t = s[0]
s[0] = s[count-1]
s[count-1]=t
#输出加密后的数据
i = count-1
while i >= 0:
print("%d" %s[i], end="")
i -=1
print()
if __name__ == "__main__":
# 数组s用来存放生成的8位数
s = [0] * 8
n = int(input("请输入将要加密的整数:"))
count = 0
encry(n, count)

程序运行结果如图12.5所示,输入了5位数12345,加密后的数据为
07896。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lee达森

创作不易,感谢打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值