用大数定律计算炉石传说2费2王子的概率 2018-08-10

概率论学不好不会用排列组合来算那就只能依靠大数定律了...
先上结论,先手25.8%,后手31.9%

import random

cards = list(range(30))

N = 1000000
count0 = 0
for i in range(N):
    random.shuffle(cards)
    hands = cards[:3]
    if 0 in hands:
    #原手就有二王子
        count0 += 1
    else:
        random.shuffle(cards)
        hands = cards[:4]
        if 0 in hands:
        #起手换牌, 第一回合摸牌, 有二王子
            count0 += 1
        elif 1 in hands or 2 in hands:
        #有把书给我, 第一回合使用之
            if cards[4] == 0:
            #摸到二王子
                count0 += 1
            elif cards[5] == 0:
            #没摸到但是第二回合摸牌摸到二王子
                count0 += 1
        elif cards[4] == 0:
         #没有把书给我, 第二回合摸到二王子
            count0 += 1       
        else:
            pass
print("%d次先手2费能上二王子: %.3f"%(N, count0/N))
            
count1 = 0
count2 = 0            
for i in range(N):
    random.shuffle(cards)
    hands = cards[:4]
    if 0 in hands:
    #原手就有二王子
        count1 += 1
    else:
        random.shuffle(cards)
        hands = cards[:5]
        if 0 in hands:
        #起手换牌, 第一回合摸牌, 有二王子
            count1 += 1
            
        elif 1 in hands and 2 in hands:
        #有两个把书给我
            if cards[5] == 0:
            #使用第一个, 摸到二王子
                count2 += 1
            elif cards[6] == 0:
            #使用第二个, 摸到二王子
                count2 += 1
            elif cards[7] == 0:
            #都没摸到, 但是第二回合摸牌摸到
                count2 += 1
                
        elif 1 in hands and 2 not in hands:
        #有一个把书给我
            if cards[5] == 0:
            #使用之, 摸到二王子
                count2 += 1
            elif cards[5] == 2:
            #使用之, 摸到另外一个把书给我:
                if cards[6] == 0:
                #使用第二个, 摸到二王子
                    count2 += 1
                elif cards[7] == 0:
                #都没摸到, 但是第二回合摸牌摸到
                    count2 += 1
            elif cards[6] == 0:
            #使用之, 没有把书给我, 但是第二回合摸牌摸到
                count2 += 1
        
        elif 2 in hands and 1 not in hands:
        #有一个把书给我
            if cards[5] == 0:
            #使用之, 摸到二王子
                count2 += 1
            elif cards[5] == 1:
            #使用之, 摸到另外一个把书给我:
                if cards[6] == 0:
                #使用第二个, 摸到二王子
                    count2 += 1
                elif cards[7] == 0:
                #都没摸到, 但是第二回合摸牌摸到
                    count2 += 1
            elif cards[6] == 0:
            #使用之, 没有把书给我, 但是第二回合摸牌摸到
                count2 += 1        
        
        elif cards[5] == 0:
        #没有把书给我, 第二回合摸到二王子
            count2 += 1
        elif cards[5] == 1 or cards[5] == 2:
        #第二回合摸到把书给我, 使用之
            if cards[6] == 0:
            #摸到二王子
                count2 += 1
                
        else:
            pass
print("%d次后手1费跳二王子:%.3f, 2费能上二王子: %.3f, 总计: %.3f"%(N, count1/N, count2/N, (count1 + count2)/N))   

结果


image.png

你可能感兴趣的:(用大数定律计算炉石传说2费2王子的概率 2018-08-10)