完整版下载 超详细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。

 

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐