方案:
1.导入random模块,通过random静态对象调用choice()方法,从自定义字符串中获取随机项
2.将获取到的随机字符进行拼接,将最终字符串结果返回给函数
3.for循环每循环一次获取一个随机字符,密码位数由循环次数决定,循环次数由传递参数值决定。
此程序需要注意的部分在于:
1.导入String模块,其中ascii_letters是生成所有字母,从a-z和A-Z,digits是生成所有数字0-9
2.将整个生成随机密码的代码封装进gen_pass()函数中,当模块文件直接执行时,调用函数即可输出结果
3.参数传递问题:调用函数无实参时,函数调用默认参数,有实参时,函数调用实际参数
1.第一种写法
#!/usr/bin/env python3
import random
import stringall_chs=string.digits+string.ascii_letters #包含0-9+a-z+A-Z的字符 一共62个字符
def gen_pass(n=8):
result=''
for i in range(n):
ch=random.choice(all_chs) #从all_chs中选择一个字符
result+=ch #拼接
return resultprint(gen_pass()) #输出8个随机字符
print(gen_pass(20)) #输出20个随机字符.....
.....
$python 4.py
d8BOvxmP
yIyOapReg7nnDMcXJFkh
2.第二种写法
利用列表推导式
#!/usr/bin/env python3
import random
import stringall_chs=string.digits+string.ascii_letters
def gen_pass(n=8):
result = [random.choice(all_chs) for i in range(n)]
return ''.join(result)print(gen_pass())
print(gen_pass(20))....
.....
$python 4.py
3sXDurdL
1PFTIWpSlnUfhS0CbIm0
提示:
我们来分析这一段代码
result = [random.choice(all_chs) for i in range(n)]
result为一个列表
列表的值由一个循环形成,大小为n
[random.choice(all_chs) for i in range(n)] 叫做列表解析,取random.choice(all_chs)作为值
表达式为[expression for iter_val in iterable if cond_expr]
例子:
12 >>>L = [ i for i in range(1,11)] 13 >>>print L 14 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]