【验证狼人杀三行定律】

验证狼人杀三行定律


将12人分为 [1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]四组,分别计算:当一组中有两狼时,1)这一组的第三张牌为狼的概率 2)随机从剩下十人中抽取一人为狼的概率

主体框架

if __name__ == '__main__':
    # lang_san_jiao = [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
    lang_san_jiao = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]  # 提前划分的三角
    all = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

    n = 0  # 三角中第三个位置为狼的次数
    n2 = 0  # 随机选择的位置为狼的次数
    for _ in range(100000):
        lang = random.sample(all, 4)  # 随机选择四个狼

        # 排除掉1111的情况保证有两狼在同一个三角中
        while not1111(lang):
            lang = random.sample(all, 4)

        find = find_lang_in_the_same_sanjiao(lang)  # 找到在同一个三角的两个狼

        # 若三角中剩下的为狼则 n+1
        place = other_place2(find)
        if place in lang:
            n += 1

        # 去掉两狼
        all_copy = all[:]
        all_copy.remove(find[0])
        all_copy.remove(find[1])
        place2 = random.sample(all_copy, 1)[0]  # 从剩下的10张牌中随机选择一张
        if place2 in lang:
            n2 += 1

    print(n)
    print(n2)

用到的函数

# 判断四只狼中是否有两狼在用一个三角
def find_lang_in_the_same_sanjiao(lang):
    lang_san_jiao = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
    for san_jiao in lang_san_jiao:
        if lang[0] in san_jiao and lang[1] in san_jiao:
            return [lang[0], lang[1]]
        elif lang[0] in san_jiao and lang[2] in san_jiao:
            return [lang[0], lang[2]]
        elif lang[0] in san_jiao and lang[3] in san_jiao:
            return [lang[0], lang[3]]
        elif lang[1] in san_jiao and lang[2] in san_jiao:
            return [lang[1], lang[2]]
        elif lang[1] in san_jiao and lang[3] in san_jiao:
            return [lang[1], lang[3]]
        elif lang[2] in san_jiao and lang[3] in san_jiao:
            return [lang[2], lang[3]]


# 已知三角中的两狼确定三角中最后一个位置
def other_place2(find):
    lang_san_jiao = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
    p = []
    for f in find:
        for san_jiao in lang_san_jiao:
            if f in san_jiao:
                san_jiao.remove(find[0])
                san_jiao.remove(find[1])
                return san_jiao[0]

实验结果

请添加图片描述
请添加图片描述
在这里插入图片描述
可以看到第三张牌为狼的概率稳定在 8.7%,而随机从剩下十人中抽取一人为狼的概率稳定在20%

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值