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

笔试巧用随机数

一个鸡贼的技巧,注意那些输出为「二值」的题目,二值就是类似布尔值,或者 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以一定的概率生成某个数
全部评论

相关推荐

想进开水团喝开水:哦 给我一个 就算你真拿到牛友也会为你开心的
点赞 评论 收藏
分享
rbjjj:太杂了吧,同学,项目似乎都没深度,都是api调度耶,分层架构思想没有体现出来了,前端没有前端优化前端工程化体现,后端微服务以及分层架构没体现以及数据安全也没体现,核心再改改,注重于计算机网络,工程化,底层原理吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务