背景:比如门口的密码锁,银行卡密码,锁屏密码,为了安全和防止女朋友查手机都需要定期更换,于是就想到写这样一段代码,在感觉不对劲的时候就随机生成一个,后续还可以通过网络短信发送到自己的手机号上,常换常新,小心驶得万年船。
直接上代码:
date_today = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
n = 6
password = []
password = ''.join(str(i) for i in random.sample(range(0, 9), n))
# sample(seq, n) 从序列seq中选择n个随机且独立的元素;
print("Today is", date_today)
print("Your password is", password)
1、日期函数
定义的时候注意格式strftime("%Y-%m-%d %H:%M:%S"),不要出现什么特殊字符,例如:_ ? 之类的,Windows系统有一些字符是不能出现在文件名里的,只不过这里只是赋值变量而已,没有命名文件夹
2、6位数密码
这里定义的就比较简单了,就是一个循环,每次获得一位数的随机数,然后通过join组合在一起,按照标准化的写法,先写循环然后password += i,也是可以的
算了我还是直接把代码放出来好了
def random_six_password():
passwd = ""
for i in range(6):
passwd += str(random.randint(0, 9))
print(passwd)
这里再注意一下random下两个方法的区别:
1)random.sample(sequence,count)
从指定序列中获取指定个数的随机元素。sample函数不会修改原有序列。
2)random.randint(m,n)
用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b
【附加题】招银网络面试题
题目:双色球由5+2构成,其中1-32选5个不重复的红球,1-15选2个不重复的蓝球,写出随机选一注的算法
解答:还是基于随机函数,不重复可以使用set()做一下去重,有其他去重也可以按照自己的想法实现,该题的解法不局限
def double_color_balls():
blue = set()
red = set()
while len(blue) < 5:
blue.add(random.randint(1, 32))
while len(red) < 2:
red.add(random.randint(1, 15))
print(list(blue) + list(red))
【注】真实的双色球规则其实不是这样的,因为我面试完去买了一注,结果一个数字都没中
【注2】这面试官跟我说set没有add方法,我想来也是直接一个无语,建议如果个人对知识点掌握非常熟练的话,直接在面试的时候指出面试官的错误(直接喷他)