官方文档地址
Python标准库 » 数字和数学模块 » https://docs.python.org/3/library/random.html
该模块为各种分布实现伪随机数生成器。
对于整数,从范围中有统一的选择。对于序列,存在随机元素的统一选择,用于生成列表的随机排列的函数,以及用于随机抽样而无需替换的函数。
在实线上,有计算均匀,正态(高斯),对数正态,负指数,伽马和贝塔分布的函数。为了生成角度分布,可以使用von Mises分布。
几乎所有模块函数都依赖于基本函数random(),它在半开放范围[0.0,1.0]内均匀生成随机浮点数。Python使用Mersenne Twister作为核心生成器。它产生53位精度浮点数,周期为2 ** 19937-1。C中的底层实现既快又线程安全。Mersenne Twister是现存最广泛测试的随机数发生器之一。但是,完全确定性,它不适用于所有目的,并且完全不适合加密目的。
此模块提供的函数实际上是random.Random类的隐藏实例的绑定方法。您可以实例化自己的实例Random以获取不共享状态的生成器。
类Random也可以,如果你想用你自己设计的不同的基本发电机子类:在这种情况下,覆盖random(), seed(),getstate(),和setstate()方法。可选地,新生成器可以提供getrandbits()方法 - 这允许randrange()在任意大范围内产生选择。
该random模块还提供了SystemRandom使用系统函数os.urandom()从操作系统提供的源生成随机数的类。
警告 不应将此模块的伪随机生成器用于安全目的。有关安全性或加密用途,请参阅该 secrets模块。
也可以看看 M. Matsumoto和T. Nishimura,“Mersenne Twister:623维等分的均匀伪随机数发生器”,ACM Transactions on Modeling and Computer Simulation Vol。1998年1月8日第1号,第1期。具有长周期和相对简单的更新操作的兼容替代随机数发生器的互补 - 乘法 - 携带配方。
—— 以上内容由Google翻译?
常见函数
import random
print( random.randint(1,10) ) # 产生 1 到 10 的一个整数型随机数
print( random.random() ) # 产生 0 到 1 之间的随机浮点数
print( random.uniform(1.1,5.4) ) # 产生 1.1 到 5.4 之间的随机浮点数,区间可以不是整数
print( random.choice('tomorrow') ) # 从序列中随机选取一个元素
print( random.randrange(1,100,2) ) # 生成从1到100的间隔为2的随机整数
a=[1,3,5,6,7] # 将序列a中的元素顺序打乱
random.shuffle(a)
print(a)
random.seed(a=None, version=2) # 初始化伪随机数生成器,若种子a相同,则可以使生成的随机数相同。如果未提供a或者a=None,则使用系统时间为种子。
random.random() # 返回一个介于左闭右开[0.0, 1.0)区间的浮点数。
random.randint(a, b) # 返回range[a,b]之间的一个整数。
random.uniform(a, b) # 返回一个介于a和b之间(含a,b)的浮点数。如果a>b,则是b到a之间的浮点数。
random.randrange(start, stop[, step]) # 返回range[start,stop)之间的一个整数,可加步长step,跟range(0,10,2)类似。
random.choice(seq) # 从非空序列seq中随机选取一个元素。如果seq为空则弹出 IndexError异常。
random.choices(population, weights=None, *, cum_weights=None, k=1) # 3.6版本新增!从population集群中随机抽取K个元素(可重复)。weights是相对权重列表,cum_weights是累计权重,两个参数不能同时存在。
random.sample(population, k) # 从population样本或集合中随机抽取K个元素(不重复)形成新的序列。常用于不重复的随机抽样、打乱序列。
random.shuffle(x[, random]) # 随机打乱序列x内元素的排列顺序。只能针对可变的序列,对于不可变序列,请使用sample()方法。
random.triangular(low, high, mode) # 返回一个N∈[low, high]的三角形分布的随机数。参数mode指明众数出现位置。
random.betavariate(alpha, beta) # β分布。返回的结果在0~1之间。
random.gammavariate(alpha, beta) # 伽玛分布。
random.expovariate(lambd) # 指数分布。
random.gauss(mu, sigma) # 高斯分布。
random.normalvariate(mu, sigma) # 正态分布。
random.lognormvariate(mu, sigma) # 对数正态分布。
random.vonmisesvariate(mu, kappa) # 卡帕分布。
random.paretovariate(alpha) # 帕累托分布。
random.weibullvariate(alpha, beta) # 威布尔分布。
random.getstate() # 返回一个当前生成器的内部状态的对象。
random.setstate(state) # 传入一个先前利用getstate方法获得的状态对象,使得生成器恢复到这个状态。
Python 生成随机数、随机字符串
import random
import string
# 随机整数:
print random.randint(1,50)
# 随机选取0到100间的偶数:
print random.randrange(0, 101, 2)
# 随机浮点数:
print random.random()print random.uniform(1, 10)
# 随机字符:
print random.choice('abcdefghijklmnopqrstuvwxyz!@#$%^&*()')
# 多个字符中生成指定数量的随机字符:
print random.sample('zyxwvutsrqponmlkjihgfedcba',5)
# 从a-zA-Z0-9生成指定数量的随机字符:
ran_str = ''.join(random.sample(string.ascii_letters + string.digits, 8))
print ran_str
# 多个字符中选取指定数量的字符组成新字符串:
print ''.join(random.sample(['z','y','x','w','v','u','t','s','r','q','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a'], 5))
# 随机选取字符串:
print random.choice(['剪刀', '石头', '布'])
# 打乱排序
items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print random.shuffle(items)
exit(?)