假如有9张扣着的牌,其中7张普通牌各自翻出猫的概率相同,比如5%能翻出来( 95%翻出来不是猫),一 张简单牌,翻出来猫的概率是20%,一张困难牌,翻出来猫的概率是1%。我现在有三轮翻牌机会,每轮都可以把所有牌翻开,全都翻开后为一轮结束,每轮结束后除了翻出来猫的牌其余全都扣回去,猫牌就留在原地不动,之后猫牌不再参与翻牌,然后进行下一轮翻牌。要是翻出来猫的话,不管几个,翻牌机会可以重置为3轮。当翻牌机会用完或者所有牌都翻出来猫游戏结束。
举个例子,比如9张牌编号1-9,1-7为普通,8为简单,9为困难, 我第一轮翻完时,8翻出了猫,这时我剩下的机会不是2轮而是重置为了3轮,下轮我只需要翻17和9, 8已经是猫就不用再翻了。然后接下来三轮每轮我都没翻出来猫,机会耗尽,所以这次游戏结束结果统计为1。
import random as radef generate(normal, simple, hard):is_cat_normal = [0]is_cat_simple = [0]is_cat_hart = [0]for i in range(normal):is_cat = ra.random() * 100if is_cat < 5:is_cat_normal.append(1)else:is_cat_normal.append(0)for i in range(simple):is_cat = ra.random() * 100if is_cat < 20:is_cat_simple.append(1)else:is_cat_simple.append(0)for i in range(hard):is_cat = ra.random() * 100if is_cat < 1:is_cat_hart.append(1)else:is_cat_hart.append(0)return is_cat_normal, is_cat_simple, is_cat_hartdef game():sum_ = 0count = 3normal, simple, hard = 7, 1, 1while count > 0 & sum_ < 9:count -= 1cat1, cat2, cat3 = generate(normal, simple, hard)has_cat1 = sum(cat1)has_cat2 = sum(cat2)has_cat3 = sum(cat3)sum_ += has_cat1 + has_cat2 + has_cat3if has_cat1 != 0 or has_cat2 != 0 or has_cat3 != 0:count = 3normal -= has_cat1simple -= has_cat2hard -= has_cat3return sum_if __name__ == '__main__':time = 10000 * 50result = dict()for i in range(10):result[i] = 0for i in range(time):res = game()result[res] += 1print(result)for i in range(10):result[i] = "{0:.10f}".format(result[i] / time)print(result)
模拟 50万次结果
{0: 84903, 1: 80804, 2: 90632, 3: 85654, 4: 68857, 5: 47392, 6: 26958, 7: 11358, 8: 3073, 9: 369}
{0: '0.1698060000', 1: '0.1616080000', 2: '0.1812640000', 3: '0.1713080000', 4: '0.1377140000', 5: '0.0947840000', 6: '0.0539160000', 7: '0.0227160000', 8: '0.0061460000', 9: '0.0007380000'}