2015年2月24日 星期二

機率與統計 2015





機率與統計



使用 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個牌面組合。計算方法是:\frac{52!}{47!5!},以 52 \choose 5 表示。





:
:
'''
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'%問題)
#
# 判斷「牌型」,
#
# 決定「彩金」。
#
# 也研究一下使用者介面。
#

沒有留言:

張貼留言