初学python,简单敲了几行生成6位包含数字和字母密码的代码
(我是在python 3上敲的)
首先理清思路:
1、包含数字和字母的六位口令共有36^6个
2、将0-9和a-z合成一个字符串pwd,用pwd[0-35]表示所有数字和小写字母,即
pwd[0]=0,pwd[1]=1…pwd[34]=y,pwd[35]=z
3、用0-36^6-1代表各个口令,
1->000001
2->000002
……
35->00000z
36->000010
……
36^6-1->zzzzzz
4、通过求模的方式从0到36^6-1得到36进制数(类似十进制,只不过逢36进一),
再通过36进制数得到pwd中代表的字符
num/36=a…b
m=pwd[b] 右边数第一个字符
num=a
依次循环6次,就可得到六位字符
举例详解:
取12345为例: 12345%36=33, pwd[33]='x', 12345//36=342
342%36=18, pwd[18]='i', 342//36=9
9%36=9, pwd[9]='9', 9//36=0
0%36=0, pwd[0]='0' 0//36=0
... pwd[0]='0' ...
... pwd[0]='0' ...
所以最终得到的字符串为xi9000,逆序后得到0009ix
敲代码:
#共两层循环
import string
pwd=string.digits+string.ascii_lowercase #string.digits就是0到9的数字,string.ascii_lowercase是小写字母
for i in range(36**6):
pp=''
for j in range(6): #取六位,每取一次,循环一次
a=i%36 #取余
pp=pp+pwd[a]
i=i//36 #'//'是取整,'/'会得到一个浮点数
if j==5:
print(pp[::-1]) #最先取到的字符反而是最低位(最右边)的,所以字符串逆序pp[::-1]
部分执行结果:
000000
000001
000002
000003
000004
000005
000006
000007
000008
000009
00000a
00000b
00000c
00000d
00000e
00000f
00000g
00000h
00000i
00000j
00000k
00000l