某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5, 然后用和除以10 的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换
这道题是把一个四位数字加密后输出一次,然后再把加密的数字还原
先把四位数据接受,然后分别获取一至四位数字
(num+5)%10=加密后的数字,
加密后的数字(5到9)-5=原来的数字
加密后的数字(0到4)+5=原来的数字
# 某个公司采用公用电话传递数据,数据是四位的整数,
# 在传递过程中是加密的,加密规则如下:
# 每位数字都加上5, 然后用和除以10 的余数代替该数字,
# 再将第一位和第四位交换,第二位和第三位交换
# 解析:
# 这道题是把一个四位数字加密后输出一次,然后再把加密的数字还原
# 先把四位数据接受,然后分别获取一至四位数字
# (num+5)%10=加密后的数字,
# 加密后的数字(5到9)-5=原来的数字
# 加密后的数字(0到4)+5=原来的数字
def function(number):
# 生成器:
num_list_old = ((number // pow(10, i)) % 10 for i in range(3, -1, -1)) # 个,十,百,千
# 加密:
num_list_new = []
for i in num_list_old:
num_list_new.append((i + 5) % 10)
# 解密:
num_list_new1 = []
for i in range(0, 4):
if num_list_new[i] < 5:
num_list_new1.append(num_list_new[i] + 5)
elif num_list_new[i] >= 5:
num_list_new1.append(num_list_new[i] - 5)
# 把列表里的数组合成一个四位数:
new_sum, new1_sum = 0, 0
for k in range(0,4):
new_sum, new1_sum = new_sum + num_list_new[abs(k-3)] * pow(10, k),\
new1_sum+num_list_new1[abs(k-3)] * pow(10, k)
print('{:0>4d}加密后是:{:0>4},解密后是:{:0>4}'.format(number, str(new_sum), str(new1_sum)))
# 生成1000-9999的数明显是加密后和解密后的数:
for i in range(1000, 9999, 253):
function(i)