BLOG
Enjoy when you can, and endure when you must.
OCT 16, 2013/Python
利用Python生成随机数

利用 Python 来实现一些小功能是很简单、快捷的,比如...生成随机数。

这里我们会用到两个内置模块:

1. string —— 包含许多有用的常量和类

2. random —— 用于生成随机数

现在有一个简单的需求,就是生成一个任意长度的随机数用作验证码。

在 random 中有多种方法可以帮助我们实现随机数的生成,其中之一就是 random.random() ,它生成一个 [0.0, 1.0) 之间的随机数,我们可以利用它来实现:

   
def random_digits(length):
    return '{0:06d}'.format(int(random.random() * (10 ** length)))[1:]

random_digits() 接收一个参数 length 以决定生成的随机数的长度,因为 random.random() 生成的随机数介于 0 和 1 之间,因此在返回时,我们始终舍弃第一位(因为它总是 0)。不过这个函数有一个弊端,就是生成的随机数长度是有限的,并且生成的随机数可能会有大量重复的数字。因此我们换一种方式实现。

string 模块里包含一个 digits,它是一个常量:'0123456789'(好像这里有点多此一举了,不过既然有,为何还要自己写呢?是吧。其实实际上我是想说 string 里还有很多东西是值得探索的。);random 中还提供了一个 sample() 方法用以提供不重复的随机抽样。因此,另一种实现如下:

import random
   
def random_digits(length):
    return ''.join(random.sample(string.digits * (length / 10 + 1), length))

因为 random.sample() 总是从序列中不重复的抽样,因此这种实现可以大大增加数字序列的随机度。

当然,实现随机数的生成还有很多方法,以上方法也许不是最好的实现(比如第一种方法可能还不如使用 random.uniform() 来得简洁)。不过呢...都是方法,这只是一些自己的探索,哈哈。感谢阅读~~

COMMENTS
LEAVE COMMNT