撲克玩法: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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...