import random def select(): """ 选择四张牌 :return: 返回四张牌的序号,0-15 """ se = [] while se.__len__() < 4: i = random.randrange(16) flag = False for n in se: if n == i: flag = True break if not flag: se.append(i) return se if __name__ == '__main__': pokers = ['a'] * 4 + ['b'] * 4 + ['c'] * 4 + ['d'] * 4 # 和上次选出的牌一样的次数 count = 0 # 实验总次数 time = 100000 for i in range(time): se = select() option = [] for i in se: option.append(pokers[i]) i = random.randrange(4) j = random.randrange(4) if option[i] == option[j]: count += 1 print(count/time)
这个题意,我理解错了两次,裂开 我对题目稍微扩展一下: 有4副相同的,每副牌有4张不同的牌(就是每副牌都是A B C D这4张)。先从这16张牌中,随机选4张出来(最开始想的是每副牌随机一张,其实是从所有的16张随机选4张)。然后,在这4张牌中随机选择一张牌,然后把抽出的一张放回3张中,再随机选择一张牌。与上次选出的牌一样的概率是() 题解: 假设第一次抽中的牌是A,那么抽第二次的时候与第一次抽的是同一张牌(是同一张牌,不是另一张A)的概率是1/4(抽中了同一张,牌面肯定是相同的)。不同张的概率是3/4,不同张的时候抽中也是牌A的概率是3/15(这个3/15的概率就是题目中“先从这16张牌中,随机选4张出来”中选择第二张牌的时候,第二张牌为A的概率),所以答案是1/4+3/4 * 3/15 = 2/5
这题可以正面做,就是计算过程会很复杂。
首先,要理解题意,16张牌中4种花色的牌各4张。
第一步,求从16张牌中抽出4张的各种情况的概率,考虑一张一张抽出,不妨设第一张抽出的牌一定是花色。第一张抽出是等概率事件,且不影响后续计算,具体来说,有。
按花色的个数分情况讨论,
① ,
② ,
可以发现,不论是第4次、第3次还是第2次抽出非的牌,概率值是不变的(参考抽签问题),之后会对类似情况进行合并,,
③ ,
④ ,
注:与假设抽到的第一种花色为类似,同样可以假设抽到的第二种花色为,是个合并,第三种第四种仍然类似,该注下略,
⑤ ,
⑥ ,
⑦ ,
验算可得总概率为
第二步,求4张中抽出1张再放回再抽出同花色的概率,考虑某花色在张中占据了张,显然可得两次都取到该花色的概率为。
可以对花色分布情况进行讨论,如表示种不同的花色分别占据张。
① ,
② ,
③ ,
④ ,
⑤ ,
综上,可得题目所求概率为