Python以一定的概率生成某个数

172 篇文章 4 订阅

笔试巧用随机数

一个鸡贼的技巧,注意那些输出为「二值」的题目,二值就是类似布尔值,或者 0 和 1 这种组合有限的。

比如说很多题目是这样,巴拉巴拉给你说一堆条件,然后问你输入的数据能不能达成这些条件,如果能的话请输出 YES,不能的话输出 NO

如果你会做当然好,如果不会做怎么办?

首先这样提交一下:

print("YES")

看下 case 通过率,假设是 60%,那么说明结果为 YES 有 60% 的概率,所以可以这样写代码:

import random
def number_of_certain_prob(seq, prob):
    x = random.uniform(0, 1)
    cumulative_prob = 0.0
    for item, item_prob in zip(seq, prob):
        cumulative_prob += item_prob
        if x < cumulative_prob:
            break
    return item

if __name__ == '__main__':
    # 测试代码
    seq = ["yes", "no"]
    prob = [0.6, 0.4]
    res = number_of_certain_prob(seq, prob)
    print(res)

验证如下

if __name__ == '__main__':
    # 测试代码
    seq = ["yes", "no"]
    prob = [0.6, 0.4]
    a = 0
    b = 0
    repeat = 100000
    for i in range(repeat):
        result = number_of_certain_prob(seq, prob)
        if result == "yes":
            a = a + 1
        elif result == "no":
            b = b + 1
    
    print(a / repeat)
    print(b / repeat)

输出:

0.60252
0.39748
参考:
  1. 关于算法笔试,labuladong 说点套路
  2. Python以一定的概率生成某个数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值