e(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 |