撲克玩法:9點半--數據分析

来源:https://www.cnblogs.com/sibide/archive/2023/01/27/17068940.html
-Advertisement-
Play Games

題目描述 牛牛嘗試用鍵盤讀入一個字元,然後在屏幕上顯示用這個字元組成的 3*3 的矩形。 輸入描述 一行讀入一個 char 類型的字元。 輸出描述 輸出這個字元組成的 3*3 矩形。 示例 1 輸入:# 輸出: ### ### ### 解題思路 方案一 採用多條 printf() 按照格式輸出,從而 ...


撲克玩法:9點半--數據分析
一、前言
又是新的一年,在這裡先給各位讀者大大們拜個晚年。祝大家新年快樂,萬事如意,闔家歡樂。
過年拜年是中國的傳統習俗,在春節期間人們會互相拜訪並送上祝福。拜年不僅是一項重要的社交活動,也是一次難忘的旅程。它讓我們感受到了團圓與溫暖,同時也增強了彼此之間的聯繫。
小編每年大年初一都會去祖母那兒拜年,一起去的還有我的叔叔、堂兄弟們。我們一般上午到,互相拜個年,寒暄一陣,拉拉家常。由於去的人比較多,一般會待到下午4,5點鐘。閑來無事,大伙便會找些事情打發下時間,由於撲克牌幾乎家家常備,而且玩法多樣也簡單,於是大年初一打牌就成了我們一個保留節目。
我們玩的最多的一種玩法是9點半,這是一種我們家鄉的玩法,至於是不是特有的就不得而知了。玩的也不大,主要是娛樂,這種玩法人越多,越有意思,越刺激。氣氛也就越活躍。
我雖然也是從小玩到大,前些年還經常贏,不過最近幾年老是輸,已經當了好幾年的“輸記”了。今年正好有空,於是想通過Python來分析一下9點半這種玩法點數情況。
首先介紹一下這種玩法。如果只想看代碼的,請跳過下麵的規則介紹。
溫馨提示:未成年人禁止賭bo。
1.1 9點半玩法規則
簡單的介紹一下這種玩法的規則。
1.1.1 流程
將一副撲克牌中的大小王去除,剩下52張牌。洗牌並切牌並放好。
回合開始,如果桌面上沒有籌碼了,則每人將商量好的一定數額的籌碼放置在桌上。作為啟動籌碼。
所有玩家按照順序進行抓牌(每次抓一張),當每人抓完2張牌後計算各自計算自己的點數(點數計算規則見下方)。
所有玩家按照抓牌的順序依次發聲,此時發聲人員可以根據自己手牌的點數和位置決定自己要不要桌上的籌碼,如果自認為自己的手牌是這一回合中最大的,則可以大喊一聲:我要了,並將自己的手牌蓋到桌上的籌碼上(切不可展示手牌)。表明自己要了所有的籌碼。完成叫牌。如果點數不大,沒有希望贏的話,則可以說:不要。跳過自己的回合。所以這個玩法又叫“要不要”。
後續有未發聲的人員,如果自認為手牌比之前叫牌的玩家還要大,則可以說一聲:連了或討了,之前叫牌玩家則必須將籌碼放到桌面上,籌碼的數量等於桌面上的籌碼數量。連了的玩家也要上桌面上等額的籌碼。後續還有未發聲的玩家或已發聲但是叫牌了的玩家也是同樣操作。而那些跳過自己回合的玩家則不能參與。
一直持續上一步,直到沒有玩家連了為止。
回合結算,所有玩家都攤開手牌,直接對比點數,如果最後一個連了的玩家的手牌最大,那麼他將贏者通吃,將桌面上所有的籌碼全部拿走。如果點數不是最大,那麼該玩家則不進行任何操作。這回合中點數最大的參與叫牌的玩家,將拿走他之前上的籌碼的2倍。桌上剩下的籌碼作為下一回合開始後的啟動籌碼。
第4步時,如果其它玩家都不要,那麼就都攤開手牌,對比點數。如果叫牌玩家的點數是這一回合中最大的,則叫牌玩家可以拿走桌上的全部籌碼。否則,這一回合中誰的點數最大,誰就在下一回合先抓牌。
回合結束,下一回合開始
1.1.2 計算手牌大小
每回合中,每人摸2張牌,將摸到的牌進行相加計算點數,看誰的點數大。
在算點數時,J、Q、K算半點,A算1點,其它撲克牌按照自身的點數計算。
如果兩張牌的點數加在一起,超過10點的要減去10點。
特別地,如果是10點,則被稱為“閉十”,也就是0點,是最小的點數。所以我們這邊”閉十”也有一種罵人很菜、很差勁的意思。
如果兩張牌一樣,則稱為對子,並且如果顏色也一樣(比如都是黑色),則稱為“健對子”(真對子),否則稱為“萬對子”(假對子)。
手牌大小比較:真對子 > 假對子 > 點數
特殊的:如果都是一樣大小的真對子,則根據當時是白天還是晚上來區分大小,即:白天時,紅色的真對子 > 黑色的真對子,晚上時,黑色的真對子 > 紅色的真對子。這個規則也被稱為“日紅夜黑”。
所以一般情況下,在沒有玩家摸到對子的時候,本回合中最大的點數就是9點半了,這也是這個玩法名字的由來。
1.1.3 其它
如果有2位玩家的手牌都很大,那麼經過幾次的叫牌,桌上的籌碼很快會多起來。籌碼一多,所有的玩家就都會興奮起來。叫牌的想贏籌碼,沒叫牌的也有機會,希望叫牌的人能相互杠上,只要不是最後一個叫牌的人最大,那麼桌上總有一半的籌碼會留到下一回合。
如果參與的玩家比較多,那麼前面叫牌的玩家很容易被後面的玩家杠上,點數不小於叫牌的玩家,但是因為有人叫牌,自己又不敢亂動。於是,桌上更容易因為杠上導致籌碼越來越多。
有的玩家在叫牌時會很大聲,上籌碼時比較用力,以表明自己這一回合志在必得,不管牌大牌小,氣勢上不能輸。但是這種情況也有可能是在虛張聲勢,讓後面的玩家不敢輕舉妄動。有的玩家在叫牌時小心翼翼,動作也比較輕,反而有可能手握大牌,所以在玩這個9點半時一定要考慮每個玩家的性格。不要被忽悠了,導致大牌不敢要。
二、代碼

# Encoding: utf-8  
# Author: 思必得  
# Date: 2023-01-24 10:02  
# Project name: FrbPythonFiles  
# IDE: PyCharm  
# File name: main  
# 模塊說明:  
"""  
"""  
# 模塊導入  
from paPath.mdTxt import csNovel  
from mdTools import ftDecTimeIt  
from threading import Thread  
from tqdm import trange  
import random  
import pickle  
import os  
# 更新日誌:  
"""  
1、2023-01-24:  
    a、創建文件  
"""  
# 待修改:  
"""  
"""  
novel = csNovel()  


class csHalfPastNine:  
    def __init__(self, pmPersons=5, pmTimes=3):  
        self.abCards = []  
        self.abPersons = pmPersons  
        self.abTimes = pmTimes  
        self.abResult = []  

    def _CreatCards(self):  
        self.abCards = [f'{x}{y}' for x in tuple('234567890JQKA') for y in tuple('rb')] * 2  
        return self.abCards  

    def _ShuffleCards(self):  
        random.shuffle(self.abCards)  
        return self.abCards  

    def _thTakeCards(self):  
        self._CreatCards()  
        Cards = self._ShuffleCards()  
        while len(Cards) >= self.abPersons * 2:  
            group = [(Cards[_], Cards[_ + self.abPersons]) for _ in range(self.abPersons)]  
            self.abResult.append(group)  
            Cards = Cards[self.abPersons * 2:]  

    def _TakeCards(self):  
        threads = []  
        for _ in trange(self.abTimes):  
            t = Thread(target=self._thTakeCards, args=())  
            threads.append(t)  
            t.start()  
        for _ in threads:  
            _.join()  # 如果執行了join代碼,則主線程會等待所有的子線程全部執行完畢後才會執行後面的代碼。  
        return self.abResult  

    def _DataPersistence(self):  
        data = {self.abPersons: self.abPersons, self.abTimes: self.abTimes, 'Datas': self.abResult}  
        with open(f'data-{self.abPersons}-{self.abTimes}.pik', 'wb') as f:  
            pickle.dump(data, f)  

    def _GetDataFromFile(self):  
        with open(f'data-{self.abPersons}-{self.abTimes}.pik', 'rb') as f:  
            return pickle.load(f)['Datas']  

    @ftDecTimeIt(1)  
    def mtCreatResult(self):  
        hpn._TakeCards()  
        hpn._DataPersistence()  
        return self.abResult  

    def _IsPair(self, pmCards: tuple):  # pmCards:('Kr', '6b')  
        if pmCards[0][0] != pmCards[1][0]:  
            return 0  
        return 2 if pmCards[0][1] == pmCards[1][1] else 1  

    def _Point(self, pmCards: tuple):  # pmCards:('Kr', '6b') --> 6.5  
        if self._IsPair(pmCards):  
            return -1  
        if pmCards[0][0] in ('J', 'Q', 'K'):  
            point1 = 0.5  
        elif pmCards[0][0] == 'A':  
            point1 = 1  
        else:  
            point1 = int(pmCards[0][0])  
        if pmCards[1][0] in ('J', 'Q', 'K'):  
            point2 = 0.5  
        elif pmCards[1][0] == 'A':  
            point2 = 1  
        else:  
            point2 = int(pmCards[1][0])  
        point_temp = point1 + point2  
        return point_temp if point_temp < 10 else point_temp - 10  

    def _CombinationFormat(self, pmCards: tuple):  # pmCards:('Kr', '6b') --> K6  
        dct = {'2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, '0': 10, 'J': 11, 'Q': 12, 'K': 13, 'A': 14}  
        one = pmCards[0][0]  
        two = pmCards[1][0]  
        return one + two if dct[one] > dct[two] else two + one  

    def _AvgPoint(self, pmCards: list):  # pmCards:[('Kr', '6b'), ('6r', '5r'), ('2b', '9r'), ('7b', '5r'), ('7r', '4b')]  -->  2.3  
        points = [self._Point(card) for card in pmCards if self._Point(card) != -1]  
        avg_point = sum(points) / len(points)  
        return float(str(avg_point)[:5])  

    def _MaxPoint(self, pmCards: list):  # pmCards:[('Kr', '6b'), ('6r', '5r'), ('2b', '9r'), ('7b', '5r'), ('7r', '4b')]  -->  6.5  
        points = [self._Point(card) for card in pmCards if self._Point(card) != -1]  
        return max(points)  

    def _MinPoint(self, pmCards: list):  # pmCards:[('Kr', '6b'), ('6r', '5r'), ('2b', '9r'), ('7b', '5r'), ('7r', '4b')] -->  1  
        points = [self._Point(card) for card in pmCards if self._Point(card) != -1]  
        return min(points)  

    def mtAnalysisResult(self):  
        datas = self._GetDataFromFile()  
        datas_len = len(datas)  
        datas_num = datas_len * self.abPersons  
        result = {'總數據量': datas_num, '回合數': datas_len}  
        pair_num = 0  # 對子數量  
        pair_false_num = 0  # 假對子數量  
        min_points = []  # 每一回合中最小的點數  
        max_points = []  # 每一回合中最大的點數,不包括對子  
        avg_points = []  # 每一回合中平均的點數,不統計對子  
        round_pairs_num = []  # 每一回合中出現對子的數量,包括真對子和假對子  
        points = []  # 每一回合,每一個人摸到的所有的點數集合  
        pairs = []  # 所有的對子  
        combinations = []  # 所有的組合情況  
        # 按回合分析  
        for index in trange(datas_len):  # [('Kr', '6b'), ('6r', '5r'), ('2b', '9r'), ('7b', '5r'), ('7r', '4b')]  
            min_points.append(self._MinPoint(datas[index]))  
            max_points.append(self._MaxPoint(datas[index]))  
            avg_points.append(self._AvgPoint(datas[index]))  
            round_pairs_num.append(sum(1 for _ in datas[index] if self._IsPair(_)))  
            # 分析所有  
            for _ in datas[index]:  
                if self._IsPair(_):  
                    if _[1][1] == 'r':  
                        pairs.append(_[1] + _[0])  
                    else:  
                        pairs.append(_[0] + _[1])  
                    pair_num += 1  
                    if self._IsPair(_) == 1:  
                        pair_false_num += 1  
                points.append(self._Point(_))  
                combinations.append(self._CombinationFormat(_))  

        # 按回合顯示  
        print('每回合中最小點數')  
        novel.mtShowWordsFrequency(min_points, 'o', 0, '-', 0)  
        print('每回合中最大點數')  
        novel.mtShowWordsFrequency(max_points, 'o', 0, '-', 0)  
        print('每回合中平均點數')  
        novel.mtShowWordsFrequency(avg_points, 'o', 0, '-', 0)  
        print('每回合中對子數')  
        novel.mtShowWordsFrequency(round_pairs_num, 'o', 0, '-', 0)  

        # 顯示所有  
        print('顯示所有的點數')  
        novel.mtShowWordsFrequency(points, 'o', 0, '-', 0)  
        print('顯示所有的對子')  
        novel.mtShowWordsFrequency(pairs, 'o', 0, '-', 0)  
        print('顯示所有的組合')  
        novel.mtShowWordsFrequency(combinations, 'o', 0, '-', 0)  

        pair_true_num = pair_num - pair_false_num  # 真對子數量  
        result['對子數'] = pair_num  
        result['真對子數'] = pair_true_num  
        result['假對子數'] = pair_false_num  
        result['非對子數'] = datas_num - pair_num  

        print(result)  
        return result  


if __name__ == '__main__':  
    os.chdir(r'E:\\')  
    hpn = csHalfPastNine(pmPersons=5, pmTimes=400000)  
    # hpn.mtCreatResult()  
    hpn.mtAnalysisResult()

三、結果及分析
上面的代碼中,分析了40萬副撲克牌,玩家數設置為5,一共產生了200萬回合的結果。每個回合有5次結果。總共1千萬次的手牌結果。
以下為這些數據的分析結果:
3.1 每回合中最小點數
******* 開始顯示柱圖 *******
序號 其它 頻數 占比 柱圖
1 1 548917 27.4% ----------------------------
2 0 439892 22.0% ----------------------
3 0.5 275474 13.8% --------------
4 2 156956 7.8% --------
5 1.5 153814 7.7% -------
6 3 118684 5.9% ------
7 2.5 98237 4.9% -----
8 3.5 53933 2.7% --
9 4 52837 2.6% --
10 5 32960 1.6% -
11 4.5 30136 1.5% -
12 5.5 12983 0.6%
13 6 11612 0.6%
14 6.5 5414 0.3%
15 7 5260 0.3%
16 7.5 1462 0.1%
17 8 983 0.0%
18 8.5 282 0.0%
19 9 152 0.0%
20 9.5 12 0.0%
******* 結束顯示柱圖 *******
上述是統計每回合中最小點數出現的頻次以及占比(忽略對子)。可以看到每回合中出現的最小點數最大概率的是1點,其次是0點和0.5點。加起來占比超過62%。
從5.5開始,隨著點數的增大,出現的頻次和占比也變小了。
3.2 每回合中最大點數
******* 開始顯示柱圖 *******
序號 其它 頻數 占比 柱圖
1 9 456833 22.8% -----------------------
2 9.5 342601 17.1% -----------------
3 8 242359 12.1% ------------
4 8.5 225195 11.3% -----------
5 7 192775 9.6% ----------
6 7.5 150197 7.5% -------
7 6 92659 4.6% ----
8 6.5 89515 4.5% ----
9 5 64089 3.2% ---
10 5.5 53104 2.7% --
11 4.5 25999 1.3% -
12 4 25993 1.3% -
13 3 14093 0.7%
14 3.5 12915 0.6%
15 2.5 4558 0.2%
16 2 3990 0.2%
17 1.0 1531 0.1%
18 1.5 1474 0.1%
19 0.5 98 0.0%
20 0 22 0.0%
******* 結束顯示柱圖 *******
上述是統計每回合中最大點數出現的頻次以及占比(忽略對子)。可以看到每回合中出現的最大點數最大概率的是9點,其次是9.5點、8點和8.5點。加起來占比超過63%。
5個玩家的情況下,在每一回合中,點數超過8點概率居然超過了63%,比實際感受上要高。看來下次要註意了。
3.3 每回合中平均點數
******* 開始顯示柱圖 *******
序號 其它 頻數 占比 柱圖
1 4.5 61317 3.1% ----
2 5.0 59155 3.0% ---
3 4.0 56934 2.8% ---
4 5.5 49931 2.5% ---
5 3.5 46309 2.3% ---
6 4.6 43762 2.2% --
7 4.4 43642 2.2% --
8 4.7 43520 2.2% --
9 4.8 43456 2.2% --
10 4.3 43179 2.2% --
11 4.9 42668 2.1% --
12 4.2 42310 2.1% --
13 4.1 41714 2.1% --
14 5.1 40747 2.0% --
15 5.2 39895 2.0% --
16 3.9 39056 2.0% --
17 5.3 38194 1.9% --
18 3.8 37665 1.9% --
19 6.0 37322 1.9% --
20 5.4 36494 1.8% --
21 3.7 35950 1.8% --
22 3.6 34140 1.7% --
23 5.6 33493 1.7% --
24 3.0 33458 1.7% --
25 5.7 31521 1.6% --
26 3.4 30602 1.5% --
27 5.8 29619 1.5% -
28 3.3 28629 1.4% -
29 5.9 27790 1.4% -
30 3.2 26488 1.3% -
31 6.5 24506 1.2% -
32 3.1 24238 1.2% -
33 6.1 23666 1.2% -
34 6.2 21973 1.1% -
35 2.5 20796 1.0% -
36 2.9 20766 1.0% -
37 6.3 19610 1.0% -
38 2.8 18678 0.9% -
39 6.4 18022 0.9% -
40 2.7 16799 0.8% -
41 4.625 15339 0.8% -
42 4.75 15194 0.8% -
43 4.25 15059 0.8% -
44 4.375 14972 0.7% -
45 4.875 14945 0.7%
46 2.6 14823 0.7%
47 4.125 14702 0.7%
48 6.6 14279 0.7%
49 5.125 14260 0.7%
50 7.0 13958 0.7%
51 5.25 13779 0.7%
52 3.875 13731 0.7%
53 3.75 13420 0.7%
54 5.375 13276 0.7%
55 6.7 12875 0.6%
56 3.625 12617 0.6%
57 5.625 12113 0.6%
58 2.4 11854 0.6%
59 5.75 11552 0.6%
60 3.375 11455 0.6%
61 6.8 11312 0.6%
62 2.0 11031 0.6%
63 3.25 10798 0.5%
64 5.875 10620 0.5%
65 2.3 10381 0.5%
66 6.9 9995 0.5%
67 3.125 9781 0.5%
68 6.125 9332 0.5%
69 2.2 8936 0.4%
70 6.25 8675 0.4%
71 2.875 8379 0.4%
72 2.1 7761 0.4%
73 2.75 7731 0.4%
74 6.375 7698 0.4%
75 7.1 7484 0.4%
76 2.625 6875 0.3%
77 7.5 6798 0.3%
78 7.2 6396 0.3%
79 6.625 6250 0.3%
80 6.75 5663 0.3%
81 1.9 5540 0.3%
82 7.3 5501 0.3%
83 2.375 5236 0.3%
84 6.875 5073 0.3%
85 1.5 4841 0.2%
86 2.25 4730 0.2%
87 1.8 4642 0.2%
88 7.4 4492 0.2%
89 2.125 4095 0.2%
90 1.7 3843 0.2%
91 7.125 3791 0.2%
92 7.25 3224 0.2%
93 7.6 3186 0.2%
94 1.6 3082 0.2%
95 1.875 2871 0.1%
96 8.0 2787 0.1%
97 7.375 2710 0.1%
98 1.75 2614 0.1%
99 7.7 2610 0.1%
100 4.166 2194 0.1%
101 4.333 2148 0.1%
102 1.625 2132 0.1%
103 7.8 2111 0.1%
104 4.666 2111 0.1%
105 4.833 2110 0.1%
106 3.833 2086 0.1%
107 3.666 2077 0.1%
108 1.4 2063 0.1%
109 5.166 2035 0.1%
110 5.333 1999 0.1%
111 7.625 1902 0.1%
112 3.333 1868 0.1%
113 1.0 1798 0.1%
114 5.833 1788 0.1%
115 5.666 1779 0.1%
116 7.75 1663 0.1%
117 3.166 1661 0.1%
118 7.9 1642 0.1%
119 1.3 1615 0.1%
120 6.166 1565 0.1%
121 1.375 1351 0.1%
122 2.833 1339 0.1%
123 6.333 1299 0.1%
124 2.666 1292 0.1%
125 1.2 1239 0.1%
126 7.875 1217 0.1%
127 1.25 1164 0.1%
128 6.666 1084 0.1%
129 8.1 1069 0.1%
130 2.333 1019 0.1%
131 6.833 1012 0.1%
132 1.1 932 0.0%
133 8.5 904 0.0%
134 1.125 893 0.0%
135 2.166 870 0.0%
136 8.2 849 0.0%
137 8.125 821 0.0%
138 7.166 820 0.0%
139 8.25 752 0.0%
140 7.333 643 0.0%
141 1.833 633 0.0%
142 8.3 569 0.0%
143 1.666 567 0.0%
144 0.9 558 0.0%
145 7.666 504 0.0%
146 8.375 495 0.0%
147 8.4 479 0.0%
148 0.875 468 0.0%
149 0.75 426 0.0%
150 1.333 423 0.0%
151 7.833 422 0.0%
152 0.5 378 0.0%
153 0.8 372 0.0%
154 1.166 319 0.0%
155 8.625 277 0.0%
156 8.166 276 0.0%
157 0.625 253 0.0%
158 8.6 232 0.0%
159 0.7 223 0.0%
160 9.0 210 0.0%
161 0.833 202 0.0%
162 8.75 196 0.0%
163 8.333 194 0.0%
164 0.666 162 0.0%
165 0.6 157 0.0%
166 8.7 130 0.0%
167 8.875 121 0.0%
168 8.666 118 0.0%
169 8.8 94 0.0%
170 8.833 93 0.0%
171 0.375 78 0.0%
172 8.9 68 0.0%
173 0.25 60 0.0%
174 0.333 55 0.0%
175 0.4 54 0.0%
176 9.125 36 0.0%
177 9.166 36 0.0%
178 9.25 30 0.0%
179 0.166 23 0.0%
180 0.0 22 0.0%
181 0.3 21 0.0%
182 9.1 16 0.0%
183 0.125 15 0.0%
184 9.5 12 0.0%
185 9.333 10 0.0%
186 0.2 4 0.0%
187 9.2 4 0.0%
188 9.375 4 0.0%
189 0.1 3 0.0%
190 9.3 1 0.0%
******* 結束顯示柱圖 *******
上述是統計每回合中平均點數出現的頻次以及占比(忽略對子)。可以看到每回合中出現的平均點數最大概率的是4.5點,其次是5點、4點、5.5點和3.5點。平均點數在3.5和5.5之間占比超過55%。也就是5個玩家的情況下,所有人點數的平均值有一半會落在3.5到5.5之間。
3.4 每回合中對子數
******* 開始顯示柱圖 *******
序號 其它 頻數 占比 柱圖
1 0 1477940 73.9% --------------------------------------------------------------------------
2 1 460232 23.0% -----------------------
3 2 58058 2.9% --
4 3 3661 0.2%
5 4 109 0.0%
******* 結束顯示柱圖 *******
5個玩家的情況下,每回合出現對子的概率超過了1/4,這個概率比比較高了。怪不得在玩的時候經常看到有對子的情況。
3.5 顯示所有的點數
******* 開始顯示柱圖 *******
序號 其它 頻數 占比 柱圖
1 1 966269 9.7% ----------
2 3 603931 6.0% ------
3 9 603134 6.0% ------
4 5 603060 6.0% ------
5 7 601309 6.0% ------
6 -1 587767 5.9% ------
7 4 483980 4.8% -----
8 2 483045 4.8% -----
9 0 482978 4.8% -----
10 6 482881 4.8% -----
11 8 482740 4.8% -----
12 4.5 362268 3.6% ----
13 6.5 362241 3.6% ----
14 8.5 362057 3.6% ----
15 3.5 362051 3.6% ----
16 1.5 361990 3.6% ----
17 2.5 361895 3.6% ----
18 9.5 361890 3.6% ----
19 0.5 361642 3.6% ----
20 7.5 361508 3.6% ----
21 5.5 361364 3.6% ----
這個結果就比較有意思了,大致可以看到有4檔。1點是獨一檔,占比最高。這應該是由於組成1點的組合最多造成的。第2檔就是其它基數整數點和所有的對子數(-1)。第3檔就是所有的偶數整數點。第4檔就是所有的非整數點。
3.6 顯示所有的對子
******* 開始顯示柱圖 *******
序號 其它 頻數 占比 柱圖
1 7r7b 30490 5.2% ------
2 8r8b 30460 5.2% ------
3 0r0b 30430 5.2% ------
4 4r4b 30305 5.2% ------
5 JrJb 30264 5.1% ------
6 ArAb 30211 5.1% ------
7 KrKb 30188 5.1% ------
8 3r3b 30177 5.1% ------
9 QrQb 30055 5.1% ------
10 2r2b 30037 5.1% ------
11 5r5b 30022 5.1% ------
12 6r6b 29975 5.1% ------
13 9r9b 29866 5.1% ------
14 0r0r 7635 1.3% -
15 ArAr 7623 1.3% -
16 5b5b 7612 1.3% -
17 9r9r 7602 1.3% -
18 7b7b 7590 1.3% -
19 JbJb 7573 1.3% -
20 QrQr 7558 1.3% -
21 9b9b 7556 1.3% -
22 KbKb 7539 1.3% -
23 JrJr 7527 1.3% -
24 6b6b 7527 1.3% -
25 3b3b 7522 1.3% -
26 5r5r 7518 1.3% -
27 8b8b 7518 1.3% -
28 4r4r 7517 1.3% -
29 0b0b 7486 1.3% -
30 QbQb 7481 1.3% -
31 7r7r 7477 1.3% -
32 KrKr 7459 1.3% -
33 8r8r 7458 1.3% -
34 AbAb 7450 1.3% -
35 2r2r 7446 1.3% -
36 4b4b 7437 1.3% -
37 3r3r 7437 1.3% -
38 6r6r 7390 1.3% -
39 2b2b 7349 1.3% -
******* 結束顯示柱圖 *******
至於所有的對子,可以看到分為2檔,假對子的概率是真對子概率的約4倍。
3.7 顯示所有的組合
******* 開始顯示柱圖 *******
序號 其它 頻數 占比 柱圖
1 KQ 121415 1.2% --
2 AJ 121258 1.2% --
3 75 121246 1.2% --
4 95 121224 1.2% --
5 Q3 121171 1.2% --
6 92 121164 1.2% --
7 73 121140 1.2% --
8 K6 121117 1.2% --
9 63 121053 1.2% --
10 A5 121046 1.2% --
11 02 121028 1.2% --
12 32 120991 1.2% --
13 94 120989 1.2% --
14 Q4 120988 1.2% --
15 08 120978 1.2% --
16 A3 120965 1.2% --
17 J2 120947 1.2% --
18 J9 120935 1.2% --
19 86 120931 1.2% --
20 62 120929 1.2% --
21 Q0 120922 1.2% --
22 65 120918 1.2% --
23 03 120918 1.2% --
24 A8 120869 1.2% --
25 04 120860 1.2% --
26 85 120829 1.2% --
27 K5 120815 1.2% --
28 K4 120793 1.2% --
29 97 120793 1.2% --
30 J3 120789 1.2% --
31 42 120784 1.2% --
32 74 120783 1.2% --
33 KJ 120776 1.2% --
34 05 120756 1.2% --
35 K8 120756 1.2% --
36 Q8 120744 1.2% --
37 J6 120694 1.2% --
38 A2 120687 1.2% --
39 64 120683 1.2% --
40 A9 120646 1.2% --
41 A7 120636 1.2% --
42 K2 120633 1.2% --
43 K7 120606 1.2% --
44 98 120606 1.2% --
45 A4 120592 1.2% --
46 J8 120557 1.2% --
47 72 120547 1.2% --
48 Q7 120536 1.2% --
49 82 120509 1.2% --
50 76 120508 1.2% --
51 Q9 120502 1.2% --
52 J4 120487 1.2% --
53 J0 120485 1.2% --
54 54 120477 1.2% --
55 83 120465 1.2% --
56 Q5 120465 1.2% --
57 K9 120453 1.2% --
58 96 120447 1.2% --
59 84 120441 1.2% --
60 Q6 120430 1.2% --
61 QJ 120416 1.2% --
62 AQ 120413 1.2% --
63 J7 120366 1.2% --
64 52 120344 1.2% --
65 A0 120332 1.2% --
66 93 120330 1.2% --
67 AK 120319 1.2% --
68 Q2 120315 1.2% --
69 87 120274 1.2% --
70 06 120258 1.2% --
71 K0 120235 1.2% --
72 07 120214 1.2% --
73 53 120197 1.2% --
74 09 120188 1.2% --
75 A6 120186 1.2% --
76 K3 120091 1.2% --
77 J5 120084 1.2% --
78 43 119959 1.2% --
79 77 45557 0.5%
80 00 45551 0.5%
81 88 45436 0.5%
82 JJ 45364 0.5%
83 AA 45284 0.5%
84 44 45259 0.5%
85 KK 45186 0.5%
86 55 45152 0.5%
87 33 45136 0.5%
88 QQ 45094 0.5%
89 99 45024 0.5%
90 66 44892 0.4%
91 22 44832 0.4%
******* 結束顯示柱圖 *******
由於數據量比較大,各種組合出現的概率還是十分均勻的。對子出現的概率為0.5%,其它任何一種非對子的概率為1.2%。

從自動化辦公到智能化辦公
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 預設情況下:Photoshop 導出切片為【GIF】格式 當你很嗨皮的把【GIF】調整為【PNG】或【JPG】格式,並保存時: 你會發現,自己的圖片格式莫名其妙還是【GIF】: 但,我們的期望是: 原因是“因為我們沒有選中全部切片,並將其格式設置為【PNG】”,解決方案(選中全部切片設置為png或其 ...
  • 閉包和作用域 變數聲明 var 聲明特點 在使用var聲明變數時,變數會被自動添加到最接近的上下文 var存在聲明提升。var聲明會被拿到函數或全局作用域的頂部,位於作用域中所有代碼之前。 可多次重覆聲明。而重覆的var聲明則會被忽略 let 聲明特點 let聲明存在塊級作用域 let聲明(創建過程 ...
  • 如果你在項目中使用了 vuex模塊化,並且在項目中使用actions中函數調用頻率高,推薦瞭解一下這種方式。 比如下麵兩種方式調用 , 第一個是直接傳參設置, 第二個是添加了非同步ajax返回內容 在回調到等下我們要封裝的js中的成功回調里,然後這個成功回調就會反饋給組件 1.創建文件utils/vu ...
  • 一、Lua應用場景 游戲開發 獨立應用腳本 Web 應用腳本 擴展和資料庫插件如:MySQL Proxy 和 MySQL WorkBench 安全系統,如入侵檢測系統 教程採用Aide Lua Pro或AndLua+開發安卓應用。在學習開發安卓應用前,先學習lua的基礎課程。 二、配置手機開發環境 ...
  • 實現Spring底層機制-01 主要實現:初始化IOC容器+依賴註入+BeanPostProcessor機制+AOP 前面我們實際上已經使用代碼簡單實現了: Spring XML 註入 bean (Spring基本介紹02) Spring 註解方式註入 bean (Spring管理Bean-IOC- ...
  • 簡介: 訪問者模式,屬於行為型的設計模式。表示一個作用於某對象結構中的各元素的操作。它是你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。 適用場景: 類中有易於變化的演算法。 希望數據結構與數據分離。 優點: 便於增加新的操作,相當於增加一個訪問者。訪問者模式將有關行為集中到一個訪問者對象 ...
  • 1.簡介 1.1 gRPC的起源 RPC是Remote Procedure Call的簡稱,中文叫遠程過程調用。用於解決分散式系統中服務之間的調用問題。通俗地講,就是開發者能夠像調用本地方法一樣調用遠程的服務。所以,RPC的作用主要體現在這兩個方面: 屏蔽遠程調用跟本地調用的區別,讓我們感覺就是調用 ...
  • 寫在開頭:本文章提供深搜與寬搜的解題思路,無具體題目對應的代碼,如想瞭解,請到個人主頁查找,感謝觀看。 深度優先搜索(DFS): 遞歸,即函數調用自身,以逐步減小問題 的規模。但在一些問題中,並不是所有的 遞歸路徑都是有效的。 如圖所示迷宮,很可能會進入橙色所標識 的“死衚衕”,只能回到之前的路徑, ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...