python实现密码游戏

文章描述了一种密码破解方法,涉及将四位数字每位加3后除以9取余,然后交换数字位置。提供了使用Python进行此操作的代码实现,包括按位运算、循环结构优化、位数交换等步骤,最后展示了直接对输入字符串进行运算的简化方法。
摘要由CSDN通过智能技术生成

题目描述

发送方会发送一个4位数的整数给接收方,接收方接收后将对密码进行破解。

破解方案如下:每位数字都要加上3再除以9的余数代替该位数字,然后将第1位和第3位数字交换,第2位和第4位数字交换。

请输出破解后的密码。

输入描述:

输入一个四位数的整数。

输出描述:

输出破解后的密码,以四位数的形式。

目录​​​​​​​

一、按位取出,分别运算

· 初始代码

二、在原思想上改进方案

1、用循环结构代替重复运算步骤

3、交换位数

3-1 用swap函数实现

3-2 a,b = b,a

4、现改进后完整代码

5、优化提取

6、def定义函数swap进行调换

7、直接在输出实现调换

三、省略提取步骤,直接生成字符串进行运算


一、按位取出,分别运算

· 初始代码


num=int(input())
a=int(num/1000)
b=int((num-1000*a)/100)
c=int((num-1000*a-100*b)/10)
d=int(num-1000*a-100*b-10*c)
a=(a+3)%9
b=(b+3)%9
c=(c+3)%9
d=(d+3)%9
cc=a
aa=c
bb=d
dd=b
numx=[aa,bb,cc,dd]
for i in numx:
    print(i,end='')
    

二、在原思想上改进方案

1、用循环结构代替重复运算步骤

numz=[a,b,c,d]
for i in numz:
    i=(i+3)%9

3、交换位数

3-1 用swap函数实现

swap(numz,0,2)
swap(numz,1,3)

在运行中发现报错,经查阅了解:在Python中不使用swap()函数进行交换。

Python以引用方式管理对象,可以交换引用,但通常不能交换内存中的对象值。当然也不需要这样做。

在C++中swap()这种函数用来交换“a和b的值”。在Python中,a和b的值不会发生交换,但位于当前命名空间中的标记(如a和b)是可以交换的。而对象本身是仍然保留。

我们接下来使用:a,b = b,a 实现位数的交换

3-2 a,b = b,a

numz=[a,b,c,d]
numx=[]
for i in numz:
    i=str((i+3)%9)
    numx.append(i)
numz[0],numz[1]=numx[2],numx[3]
numz[2],numz[3]=numx[0],numx[1]

建立空列表numx实现运算后的暂时储存

通过 a,b = b,a 实现交换位数并储存到原列表numz

numz=[a,b,c,d]
numx=[]
for i in numz:
    i=str((i+3)%9)
    numx.append(i)
numz[0],numz[1]=numx[2],numx[3]
numz[2],numz[3]=numx[0],numx[1]

此处将int变量转为str目的是实现最终的整数输出而非列表输出

print(''.join(numz))

通过join函数实现将列表中字符串类型的变量提取出来

注:语法:  'sep'.join(seq)

参数说明
sep:分隔符。可以为空
seq:要连接的元素序列、字符串、元组、字典
上面的语法即:以sep作为分隔符,将seq所有的元素合并成一个新的字符串

4、现改进后完整代码

num=int(input())
a=int(num/1000)
b=int((num-1000*a)/100)
c=int((num-1000*a-100*b)/10)
d=int(num-1000*a-100*b-10*c)
numz=[a,b,c,d]
numx=[]
for i in numz:
    i=str((i+3)%9)
    numx.append(i)
numz[0],numz[1]=numx[2],numx[3]
numz[2],numz[3]=numx[0],numx[1]
print(''.join(numz))

5、优化提取

a=num//1000
b=(num//100)%10
c=(num//10)%10
d=num%10

6、def定义函数swap进行调换

def swapPositions(numx,i,j):
  tmp=numx[i]
  numx[i] =numx[j]
  numx[j] =tmp
  return
swapPositions(numx,0,2)
swapPositions(numx,1,3)

7、直接在输出实现调换

print(numx[2],numx[3],numx[0],numx[1],sep='')

三、省略提取步骤,直接生成字符串进行运算

num=input()
numx=str()
for i in range(len(num)):
    numx=numx+str((int(num[i])+3)%9)
print(numx[2],numx[3],numx[0],numx[1],sep='')

其中

numx=numx+str((int(num[i])+3)%9)

可以用

numx+=str((int(num[i])+3)%9)

替换

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值