背景:比如门口的密码锁,银行卡密码,锁屏密码,为了安全和防止女朋友查手机都需要定期更换,于是就想到写这样一段代码,在感觉不对劲的时候就随机生成一个,后续还可以通过网络短信发送到自己的手机号上,常换常新,小心驶得万年船。

直接上代码:

    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方法,我想来也是直接一个无语,建议如果个人对知识点掌握非常熟练的话,直接在面试的时候指出面试官的错误(直接喷他)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐