import random
随机取整数
randint(a,b):随机返回[a, b]中的一个整数
randrange(start, stop=None, step=1):在步长为step的区间[start,stop) 中随机返回一个数
print(random.randint(0,5))
print(random.randrange(0,6,2))
1
0
随机取小数
random():在[0, 1)中随机取一个数
uniform(a, b):在[a,b]中随机取一个数
print(random.random())
print(random.uniform(1,5))
0.8276671279959303
3.8976996563597806
从一个序列中随机抽取一个元素:choice(seq)
l1 = [1,2,'a','b']
print(random.choice(l1))
s = "abcd"
print(random.choice(s))
a
a
从集合或序列中等概率的抽取k个元素:sample(seq, k)
l = [1, 3, "ab", 'd', 'f']
print(random.sample(l, 3))
[1, 3, 'f']
按指定权重抽取k个元素,choices(seq,weights=None,cum_weights=None,k=1)
- weights:可用列表形式指定seq中每个元素的权重
- cum_weights:累加权重
- k:总共取出元素个数
- 返回一个大小为k的列表
- 如果不指定权重,默认每个元素的权重相等
l1 = [1,2,'a','b']
print(random.choices(l1,weights=[0.1,0.3,0.3,0.1],k=2))
['a', 'a']
打乱列表顺序:shuffle(list)
l = [1, 2, 3, 4, 5]
random.shuffle(l)
print(l)
[2, 1, 3, 5, 4]
各种分布
- betavariate(alpha, beta):贝塔分布
- expovariate(lambd):指数分布
- gammavariate(alpha, beta):伽马分布
- gauss(mu, sigma):高斯分布
- normalvariate(mu, sigma):正态分布
- lognormvariate(mu, sigma):对数正态分布
- paretovariate(alpha):帕累托分布
- triangular(low=0.0, high=1.0, mode=None):三角形分布
- vonmisesvariate(mu, kappa):卡帕分布
- weibullvariate(alpha, beta):威布尔分布
其他
- getrandbits(k):生成一个包含k个随机位的整数
- getstate():返回内部状态
- setstate(state):从getstate()返回的对象,恢复内部状态
- seed(x):改变随机数生成器的种子,相同的种子生成的随机数是一样的
random.seed(1)
print(random.random())
random.seed(1)
print(random.random())
0.13436424411240122
0.13436424411240122
练习题
随机生成一个n位由数字字母组成的验证码
def get(n):
'''随机生成n位由数字字母组成的验证码'''
res = ""
for i in range(n):
num = str(random.randint(0, 9))
char1 = chr(random.randint(65, 90))
char2 = chr(random.randint(97, 122))
tmp = [num, char1, char2]
char = random.choice(tmp)
res += char
return res
print(get(6))
aY8Yru
发红包
def redpoket(total, number):
'''
total:红包总金额
number:红包个数,每个红包的钱数至少是0.01
'''
rest = total * 100
for i in range(number - 1):
tmp = random.randint(1, rest - (number - 1 - i))
rest -= tmp
yield tmp / 100
yield rest / 100
for i in redpoket(5, 3):
print(i, end=' ')
1.25 2.07 1.68