機率與統計
使用 Python 程式語言 為輔
ryChapter01.pptx
https://www.dropbox.com/s/eetf9y2n6qs7dns/ryChapter01.pptx?dl=0
ryChapter01.pdf
https://www.dropbox.com/s/6aid75zhyxmc8g1/ryChapter01.pdf?dl=0
http://zh.wikipedia.org/wiki/撲克牌型
牌面
|
機會
|
分佈
| |
大同花順
|
4 / 2,598,960
|
0
|
.000154%
|
同花順
|
36 / 2,598,960
|
0
|
.00139%
|
四枚(4支/鐵支)
|
624 / 2,598,960
|
0
|
.0240%
|
葫蘆
|
3,744 / 2,598,960
|
0
|
.144%
|
同花
|
5,108 / 2,598,960
|
0
|
.197%
|
順
|
10,200 / 2,598,960
|
0
|
.392%
|
三條 (3支)
|
54,912 / 2,598,960
|
2
|
.11%
|
兩對 (2p)
|
123,552 / 2,598,960
|
4
|
.75%
|
一對 (1p/2支)
|
1,098,240 / 2,598,960
|
42
|
.26%
|
無對 (孤支)
|
1,302,540 / 2,598,960
|
50
|
.12%
|
總計
|
2,598,960 / 2,598,960
|
100
|
.00%
|
:
五張牌共有2,598,960個牌面組合。計算方法是:
:
:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
''' | |
ryCombination.py | |
List of poker hands | |
ref: http://en.wikipedia.org/wiki/List_of_poker_hands | |
renyuan, 2015/02/26 | |
''' | |
from math import factorial | |
def Comb(n,m): | |
''' | |
從 n 個相異物,取出 m 個, | |
「組合數」如下: | |
y= n!/m!/(n-m)! | |
其中, n >= m | |
''' | |
y= factorial(n)/factorial(m)/factorial(n-m) | |
return y | |
C= Comb # 為 Comb 函數取個「別名」 (alias),方便以下使用。 | |
print('C(52,5)= %d, 從 52 張牌,選出 5 張,其組合總數。\n'%C(52,5)) | |
# | |
# 以下公式參考這個網頁: | |
# http://en.wikipedia.org/wiki/List_of_poker_hands | |
# | |
s1= 'Straight flush (同花順)' | |
p1= C(10,1)*C(4,1)/C(52,5) | |
s2= 'Four of a kind (4支/鐵支)' | |
p2= C(13,1)*C(4,4)*C(12,1)*C(4,1)/C(52,5) | |
s3= 'Full house (葫蘆)' | |
p3= C(13,1)*C(4,3)*C(12,1)*C(4,2)/C(52,5) | |
s4= 'Flush (同花)' | |
p4= C(13,5)*C(4,1)/C(52,5) - p1 # 不含同花順 | |
s5= 'Straight (順子)' | |
p5= C(10,1)*4**5/C(52,5) - p1 # 不含同花順 | |
s6= 'Three of a kind (3條)' | |
p6= C(13,1)*C(4,3)*C(12,2)*C(4,1)*C(4,1)/C(52,5) | |
s7= 'Two pair (2對)' | |
p7= C(13,2)*C(4,2)*C(4,2)*C(11,1)*C(4,1)/C(52,5) | |
s8= 'One pair (1對)' | |
p8= C(13,1)*C(4,2)*C(12,3)*4**3/C(52,5) | |
s9= 'High card (孤支)' | |
p9= (C(13,5)-10)*(4**5-4)/C(52,5) | |
ss= 'sum of all (總和)' | |
ps= sum([p1,p2,p3,p4,p5,p6,p7,p8,p9]) | |
# | |
# 以下 為了 列印 整齊, | |
# | |
aList= [(p1,s1), | |
(p2,s2), | |
(p3,s3), | |
(p4,s4), | |
(p5,s5), | |
(p6,s6), | |
(p7,s7), | |
(p8,s8), | |
(p9,s9), | |
(ps,ss) ] | |
for x in aList: | |
print('p= %.6f, s= %s'%x) | |
# 執行結果 | |
''' | |
>>> | |
C(52,5)= 2598960, 從 52 張牌,選出 5 張,其組合總數。 | |
p= 0.000015, s= Straight flush (同花順) | |
p= 0.000240, s= Four of a kind (4支/鐵支) | |
p= 0.001441, s= Full house (葫蘆) | |
p= 0.001965, s= Flush (同花) | |
p= 0.003925, s= Straight (順子) | |
p= 0.021128, s= Three of a kind (3條) | |
p= 0.047539, s= Two pair (2對) | |
p= 0.422569, s= One pair (1對) | |
p= 0.501177, s= High card (孤支) | |
p= 1.000000, s= sum of all (總和) | |
''' | |
#--------------------------------------- | |
# 根據以上,我們可以設計一項賭博遊戲如下, | |
# 我先起個頭,你把它延伸下去。 | |
#-------------------------------------- | |
s= '莊家設計彩金制度如下' | |
print('\n%s\n'%s) | |
for x in aList: | |
p,s= x | |
彩金 = 1/p | |
print('彩金= %.1f, s= %s'%(彩金,s)) | |
# | |
# 製作 牌 | |
# | |
花色= ['s', 'h', 'd', 'c'] # spade, heart, diamond, club | |
數字= [1,2,3,4,5,6,7,8,9,10,11,12,13] # J,Q,K= 11,12,13 | |
牌= [] | |
for c in 花色: | |
for d in 數字: | |
牌 += [(d,c)] | |
s= '玩牌,抽 五支牌。' | |
print('\n%s\n'%s) | |
import random | |
random.shuffle(牌) | |
五支牌= random.sample(牌, 5) | |
print('五支牌= ', 五支牌) | |
問題= '牌型?彩金?\n' | |
print('\n%s\n'%問題) | |
# | |
# 判斷「牌型」, | |
# | |
# 決定「彩金」。 | |
# | |
# 也研究一下使用者介面。 | |
# | |
沒有留言:
張貼留言