python随机数(转载)

随机生成 0 到 1 之间的浮点数

random.random() 方法会返回 [0.0, 1.0) 之间的浮点数,注意,这是一个左闭右开的区间,随机数可能会是 0 但不可能为 1 。html

 

随机生成 a 与 b 之间的整数

使用 random.randint(a , b) 方法,你能够生成一个 a 与 b 之间的随机整数,也就是 [a, b] 。python

 

固然,若是你想要生成的随机整数不会包含 b ,也即 [a, b) , 你可使用 random.randrange() 方法。安全

 

生成 a 与 b 之间的浮点数

若是你须要生成 [a, b] 之间的随机浮点数,那么 random.uniform(a, b) 会知足你的需求。dom

 

从列表中随机取出一个元素

若是你想从序列类型中随机取出一个元素,好比列表、元祖、字符串等,random.choice() 是一个不错的选择。ide

 

 

须要注意的是,该方法须要参数非空,否则会抛出 IndexError 的错误。函数

 

打乱列表中元素的顺序

使用 random.shuffle(items) 方法能够帮你把序列 items 中的元素随机打乱。spa

 

 

若是你不想修改原来的列表,你可使用 copy 模块先拷贝一份原来的列表orm

 

 

从列表中随机取出 n 个元素

使用 random.sample(items, n) 方法能够从序列 items 中随机取出 n 个元素。htm

 

生成密码学安全的伪随机数

 

什么是密码学安全的伪随机数,请看维基百科( http://dwz.cn/7JhRN5 )。不过暂时不须要深刻的话,理解为比普通随机数更随机的技术就好。对象

若是你须要生成密码学安全的随机数,你能够经过 random.SystemRandom 类实现。random.SystemRandom 实例化后的对象拥有与 random 相似的方法。

 

若是 Python 版本在 3.6 及以上,可使用 secrets 模块

经过 secrets 模块,一样也能生成密码学安全的随机数。而且,利用它生成一些特定的秘钥特别方便。

下面是一些简单的例子

 

 

经过这个模块比较字符串相等,还能够减小被时序攻击的风险。

 

什么是时序攻击呢,我这找了一个通俗的解释

举一个最简单的计时攻击的例子,某个函数负责比较用户输入的密码和存放在系统内密码是否相同,若是该函数是从第一位开始比较,发现不一样就当即返回,那么经过计算返回的速度就知道了大概是哪一位开始不一样的,这样就实现了电影中常常出现的按位破解密码的场景。密码破解复杂度成千上万倍甚至百万千万倍的降低。

(文字来源知乎,侵删)

关于secrets 模块的更多介绍,请看官方文档( https://docs.python.org/3/library/secrets.html )

 

转载自:http://baijiahao.baidu.com/s?id=1596465591200328534&wfr=spider&for=pc

相关文章
相关标签/搜索