国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

一步步解析Python斗牛游戲的概率

2020-01-04 17:46:20
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
這篇文章主要帶著大家一步步解析Python斗牛游戲的概率,計(jì)算出斗牛游戲的概率,感興趣的朋友可以參考一下
 

過(guò)年回家,都會(huì)約上親朋好友聚聚會(huì),會(huì)上經(jīng)常會(huì)打麻將,斗地主,斗牛。在這些游戲中,斗牛是最受歡迎的,因?yàn)榭梢院芏嗳艘黄鹜妫覜](méi)有技術(shù)含量,都是看運(yùn)氣(專業(yè)術(shù)語(yǔ)是概率)。
斗牛的玩法是:

  • 1、把牌中的JQK都拿出來(lái)
  • 2、每個(gè)人發(fā)5張牌
  • 3、如果5張牌中任意三張加在一起是10的 倍數(shù),就是有牛。剩下兩張牌的和的10的余數(shù)就是牛數(shù)。

牌的大小:

4條 > 3條 > 牛十 > 牛九 > …… > 牛一 >沒(méi)有牛

而這些牌出現(xiàn)的概率是有多少呢?

由于只有四十張牌,所以采用了既簡(jiǎn)單,又有效率的方法枚舉來(lái)計(jì)算。
計(jì)算的結(jié)果:

  • 所有牌的組合數(shù):658008
  • 出現(xiàn)四條的組合數(shù):360,概率 :0.05%
  • 出現(xiàn)三條的組合數(shù):25200,概率 :3.83%
  • 出現(xiàn)牛十的組合數(shù):42432,概率 :6.45%
  • 出現(xiàn)牛九或牛八的組合數(shù):87296,概率 :13.27%
  • 出現(xiàn)牛一到牛七的組合數(shù):306112,概率 :46.52%
  • 出現(xiàn)沒(méi)有牛的組合數(shù):196608,概率 :29.88%

所以有七成的概率是有牛或以上的,所以如果你經(jīng)常遇到?jīng)]有牛,說(shuō)明你的運(yùn)氣非常差或者本來(lái)是有牛的,但是你沒(méi)有找出來(lái)。

Python源代碼:

 

# encoding=utf-8__author__ = 'kevinlu1010@qq.com'import osimport cPicklefrom copy import copyfrom collections import Counterimport itertools'''計(jì)算斗牛游戲的概率'''class Poker():  '''  一張牌  '''  def __init__(self, num, type):    self.num = num # 牌數(shù)    self.type = type # 花色class GamePoker():  '''  一手牌,即5張Poker  '''  COMMON_NIU = 1 # 普通的牛,即牛一-牛七  NO_NIU = 0 # 沒(méi)有牛  EIGHT_NINE_NIU = 2 # 牛九或牛八  TEN_NIU = 3 # 牛十  THREE_SAME = 4 # 三條  FOUR_SAME = 5 # 四條  def __init__(self, pokers):    assert len(pokers) == 5    self.pokers = pokers    self.num_pokers = [p.num for p in self.pokers]    # self.weight = None # 牌的權(quán)重,權(quán)重大的牌勝    # self.money_weight = None # 如果該牌贏,贏錢(qián)的權(quán)重    self.result = self.sumary()  def is_niu(self):    '''    是否有牛    :return:    '''    # if self.is_three_same():    # return 0    for three in itertools.combinations(self.num_pokers, 3):      if sum(three) % 10 == 0:        left = copy(self.num_pokers)        for item in three:          left.remove(item)        point = sum(left) % 10        return 10 if point == 0 else point    return 0  def is_three_same(self):    '''    是否3條    :return:    '''    # if self.is_four_same():    # return 0    count = Counter([p.num for p in self.pokers])    for num in count:      if count[num] == 3:        return num    return 0  def is_four_same(self):    '''    是否4條    :return:    '''    count = Counter([p.num for p in self.pokers])    for num in count:      if count[num] == 4:        return num    return 0  def sumary(self):    '''    計(jì)算牌    '''    if self.is_four_same():      return GamePoker.FOUR_SAME    if self.is_three_same():      return GamePoker.THREE_SAME    niu_point = self.is_niu()    if niu_point in (8, 9):      return GamePoker.EIGHT_NINE_NIU    elif niu_point == 10:      return GamePoker.TEN_NIU    elif niu_point > 0:      return GamePoker.COMMON_NIU    else:      return GamePoker.NO_NIUdef get_all_pokers():  '''  生成所有的Poker,共四十個(gè)  :return:  '''  pokers = []  for i in range(1, 11):    for j in ('A', 'B', 'C', 'D'):      pokers.append(Poker(i, j))  return pokersdef get_all_game_poker(is_new=0):  '''  生成所有g(shù)ame_poker  :param pokers:  :return:  '''  pokers = get_all_pokers()  game_pokers = []  if not is_new and os.path.exists('game_pokers'):    with open('game_pokers', 'r') as f:      return cPickle.loads(f.read())  for pokers in itertools.combinations(pokers, 5): # 5代表五張牌    game_pokers.append(GamePoker(pokers))  with open('game_pokers', 'w') as f:    f.write(cPickle.dumps(game_pokers))  return game_pokersdef print_rate(game_pokers):  total_num = float(len(game_pokers))  four_num = len([game_poker for game_poker in game_pokers if game_poker.result == GamePoker.FOUR_SAME])  three_num = len([game_poker for game_poker in game_pokers if game_poker.result == GamePoker.THREE_SAME])  ten_num = len([game_poker for game_poker in game_pokers if game_poker.result == GamePoker.TEN_NIU])  eight_nine_num = len([game_poker for game_poker in game_pokers if game_poker.result == GamePoker.EIGHT_NINE_NIU])  common_num = len([game_poker for game_poker in game_pokers if game_poker.result == GamePoker.COMMON_NIU])  no_num = len([game_poker for game_poker in game_pokers if game_poker.result == GamePoker.NO_NIU])  print '所有牌的組合數(shù):%d' % total_num  print '出現(xiàn)四條的組合數(shù):%d,概率 :%.2f%%' % (four_num, four_num * 100 / total_num)  print '出現(xiàn)三條的組合數(shù):%d,概率 :%.2f%%' % (three_num, three_num * 100 / total_num)  print '出現(xiàn)牛十的組合數(shù):%d,概率 :%.2f%%' % (ten_num, ten_num * 100 / total_num)  print '出現(xiàn)牛九或牛八的組合數(shù):%d,概率 :%.2f%%' % (eight_nine_num, eight_nine_num * 100 / total_num)  print '出現(xiàn)牛一到牛七的組合數(shù):%d,概率 :%.2f%%' % (common_num, common_num * 100 / total_num)  print '出現(xiàn)沒(méi)有牛的組合數(shù):%d,概率 :%.2f%%' % (no_num, no_num * 100 / total_num)def main():  game_pokers = get_all_game_poker() # 658008種  print_rate(game_pokers)main()

以上就是Python計(jì)算斗牛游戲的概率相關(guān)內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 星子县| 南川市| 新竹市| 谷城县| 毕节市| 正镶白旗| 竹北市| 仪征市| 五华县| 正宁县| 翼城县| 承德县| 江西省| 吴旗县| 姚安县| 新宁县| 曲阜市| 仁寿县| 营口市| 水城县| 十堰市| 辽宁省| 昌宁县| 胶南市| 青川县| 石渠县| 长治县| 吉安县| 鄂托克旗| 公安县| 长泰县| 乐山市| 遵义市| 汾阳市| 新兴县| 瑞丽市| 湾仔区| 凤阳县| 剑河县| 松桃| 奉贤区|