欢迎来到Louis的博客

人生三从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。
扩大
缩小

random 模块

一. 官方文档上的一些定义

1.该模块实现了各种分布的伪随机数生成器。

2.几乎所有的模块函数都依赖于基本函数随机函数,在半开放范围内均匀生成随机浮子[0.0,1.0]。 Python 使用梅森旋转算法作为核心生成器。 它生产53位精度浮标,周期为2 * * 19937-1。 在 c 语言中,基本的实现是快速和线程安全的。 梅森旋转算法是现存测试最广泛的随机数生成器之一。 但是,由于完全确定性,它不适合于所有的目的,并且完全不适合于加密的目的。

3. Warning:The pseudo-random generators of this module should not be used for security purposes. For security or cryptographic uses, see the secrets module.

该模块的伪随机生成器不应用于安全目的。 对于安全性或者加密使用,请参见secrets模块。

官方文档链接:random-generate dpseudo random numbers

Note: 有与random模块中实现的功能都基于梅森旋转算法,所以可以认为是伪随机,只要是通过科学计算得到的结果都不是真正的随机,所以强烈建议不要在进行密码操作时使用random。

二. 模块函数

random.random()

返回一个范围在[0.0,1.0] 之间的随机浮点数

import random

print(random.random())
print(random.random())
print(random.random())

#result
#0.13401250901874961
#0.8127610152040938
#0.3549116816608451

random.uniform(low,high)

从(low,high) 范围内,返回一个随机的浮点数

print(random.uniform(1, 10))            
print(random.uniform(20, 30))           
                                        
# 8.241765001406979                     
# 24.244539919838136                    

 

random.randrange(stop)

从range(start, stop, step)中返回随机选择的元素。 这相当于选择(range(start,end,step)中的一个元素 ,但实际上并不构建range对象。

返回的结果在[start,end)中选择,跟range一样随机取值的范围并不包含end。

print(random.randrange(10))       
print(random.randrange(1, 10))
print(random.randrange(0, 100, 2))


#result
#0
#9
#72

random.randint(low, high)

返回一个范围在[low,high]之间的整数,low, high需要是一个范围,如果该范围为空,会抛出一个ValueError异常

其实还可以看作是random.randrange(n, m+1)

print(random.randint(1, 10))
print(random.randint(100, 101))
print(random.randint(-10, 1))


#result
#6
#100
#-2

 

random.choice(seq)

从一个非空序列中返回一个随机元素,如果seq为空,会抛出IndexError异常

print(random.choice(['python', 'java', 'php', 'ruby', 'c++', 'c#']))
print(random.choice([x for x in range(10, 100)]))
print(random.choice(['python', 'java', 'php', 'ruby', 'c++', 'c#']))


#result
#ruby
#88
#php

randon.sample(seq, num)

从一个非空序列中返回num的随机元素组成的列表,如果seq为空,会抛出IndexError异常,注意num的范围要在[0, len(seq)] 之间

a = [1, 2, 3, 4, 5, 6, 7]
print(random.sample(a, 1))
print(random.sample(a, 0))
print(random.sample(a, 5))

# [1]
# []
# [4, 3, 5, 6, 7]

random.shuffle(seq)

将一个序列原地打乱顺序,直接修改序列,没有返回值,注意由于是in place(原地修改),所以这个序列要是可变数据类型。

如果你想将一个不可变序列打乱顺序,可以使用random.sample(tuple, len(tuple)) 返回一个打乱顺序的新列表。

a = [1, 2, 3, 4, 5, 6, 7]
b = (1, 2, 3, 4, 5, 6, 7)

print(random.shuffle(a))
print(a)
print(random.sample(b, len(b)))

#result
# None
# [3, 1, 2, 7, 5, 4, 6]
# [1, 2, 5, 6, 3, 7, 4]
def get_code(n=6, alpha=True):                                 
    s = ''                                                     
    for i in range(n):                                         
        num = str(random.randint(0,9))                         
        if alpha:                                              
            alpha_s = chr(random.randint(65, 90))              
            num = random.choice([alpha_s, num])                
        s += num                                               
    return s                                                   
                                                               
print(get_code())                                              
随机验证码

 

posted on 2018-08-20 16:05  Louiszj  阅读(137)  评论(0编辑  收藏  举报

导航