random模块

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
    '''
    # 因用小数会带来不精确问题,对整体乘100
    # 此时每个红包至少是1元
    rest = total * 100
    for i in range(number - 1):
        # 为保证剩下的每个红包至少有1元
        # 每次取的钱数不能超过当前的钱数-取完后剩余红包个数
        tmp = random.randint(1, rest - (number - 1 - i))
        rest -= tmp
        yield tmp / 100
    yield rest / 100

# 总共5元红包,分3个发
for i in redpoket(5, 3):
    print(i, end=' ')
1.25 2.07 1.68 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值