python 实现记牌器原理

news/2024/11/17 4:58:17/

python 实现记牌器原理

        • 方案一(减牌记牌)
        • 方案二(增牌记牌)
        • 字典Update更新初学者常见报错问题

方案一(减牌记牌)

假设与这“333445667788QQJ”十五张牌,每人五张牌

a = "333445667788QQJ"for i in range(len(a)):# 玩家一one = input("one:")for c in one:if c in a:a = a.replace(c, '', 1)print(a)# 玩家二two = input("two:")for c in two:if c in a:a = a.replace(c, '', 1)print(a)# 玩家三        three = input("three:")for c in three:if c in a:a = a.replace(c, '', 1)print(a)

终端输出:

>one:3    结果输出:33445667788QQJ
>two:3  结果输出:3445667788QQJ
>three:3  结果输出:445667788QQJ
>`one:4  结果输出:45667788QQJ
>two:4  结果输出:5667788QQJ
>three:5  结果输出:667788QQJ
>......

牌数量每发一张牌减掉一张牌

方案二(增牌记牌)

注释:T表示10,X表示小王,D表示大王

该实现假设使用扑克牌的点数(2~9,T,J,Q,K,A,X,D)来计数,且只考虑一副标准52张的扑克牌。

首先,需要定义一个初始的空牌堆(即52张牌每张牌的初始数量为0),可以使用字典来表示:

cards = cards = {'2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0, '9': 0, 'T': 0, 'J': 0, 'Q': 0, 'K': 0, 'A': 0, 'X': 0,'D': 0}

然后,在每次发牌时,对应点数的牌的数量加1即可:

cards[card_number] += 1

例如,当发出3、5、6、8四张牌时,计数器应为:

cards =  {'2': 0, '3': 1, '4': 0, '5': 1, '6': 1, '7': 0, '8': 1, '9': 0, 'T': 0, 'J': 0, 'Q': 0, 'K': 0, 'A': 0, 'X': 0,'D': 0}

需要注意的是,如果使用多副扑克牌,需要把初始牌堆的数量扩大到多倍。

完整的记牌器代码如下:


import re# 左边键是卡牌,右边是卡牌数量
cards =  {'2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0, '9': 0, 'T': 0, 'J': 0, 'Q': 0, 'K': 0, 'A': 0, 'X': 0,'D': 0}
# 没发牌前
print(cards)# 发四张牌
n = 0
while True:data = {}def record_card(card_number):cards[card_number] += 1def print_cards():for card_number, count in cards.items():# print(f'{card_number}: {count}')data.update([(card_number, count)])print(data)name = str(input('输入2~9,T,J,Q,K,A,X,D:'))if re.match('[23456789TJQKAXD]', name):record_card(int(name))# 启动函数print_cards()n += 1if n == 4:breakelse:print("你的输入有误,输入范围:2~9,T,J,Q,K,A,X,D")continue

字典Update更新初学者常见报错问题

data.update(f'{card_number}: {count}')
# ValueError:字典更新序列元素#0的长度为1;需要2个---因为一个字符串是无法使用更新字典,需要弄成字典或元组列表更新字典,如下:
data.update([(f'{card_number}', f'{count}')])

当您尝试使用序列(如列表或元组)更新字典时,会出现此错误消息,其中一个元素的长度为1,而不是预期的2。

例如,考虑以下代码:

my_dict = {'name': 'John', 'age': 30}
my_dict.update([('height', 180), ('weight',)]) # 权重只有一个值,而不是两个

在这种情况下,update()方法需要一个元组序列,其中每个元组有两个值:一个键及其对应的值。但是,第二个元组(‘weight’,)只有一个值,从而导致ValueError

要修复此错误,需要确保序列中的每个元组都有两个值。在上面的示例中,您可以删除缺少值的元组以避免错误:

my_dict.update([('height', 180), ('weight', 80)])

现在,update()方法将把“height”和“weight”键及其相应的值添加到字典中,而不会引发任何错误。


http://www.ppmy.cn/news/583559.html

相关文章

基于opencv2的斗地主记牌器(python)

一、开发该系统软件环境及使用的技术说明 开发环境:JetBrains PyCharm Community Edition 2019.2.5 x64远端仓库:GitHub语言版本:python3.7.0(Anaconda3)技术说明: OpenCV 4.2.0.32NumPy 1.16.5PyQt5 5.15.0PyWinMouse 1.0 &…

安卓基于图像识别和CNN做出一个通用的斗地主记牌器(一)

先放一个效果图,如下: 设计的主体思路: 1.图像的快速截取 2.图像的预处理 3.识别模型的设计和训练 4.图像匹配 5.业务逻辑的实现 其中,图像处理主要是基于安卓版opencv。识别模型是基于cnn神经网络。 难点 1.粘连图像的分…

因果推断阶段系列23[阶段2-5]----元学习器 meta-learners

因果推断阶段系列23[阶段2-5]----元学习器meta-learners 1. S-Learner(又名稳定学习器)2. T-Learner(T学习器)3. X-Learner(X学习器)小结参考文献简要回顾一下,前几节介绍了处理效应异质性,即确定不同个体对处理的反应方式。在这个框架中,估计对象是: τ ( x ) = E […

2023年第一届山东省职业技能大赛“网络安全”赛项B模块任务书

2023年第一届山东省职业技能大赛“网络安全”赛项B模块任务书 模块B-网络安全事件响应、数字取证调查和应用程序安全1竞赛项目简介:1.1 介绍:1.2 所需的设备、机械、装置和材料:1.3 评分方案:1.4 项目和任务的描述:2工作任务:2.1.1 数据包分析:2.1.2 Web 安全测试渗透测…

Intel官网资料下载链接

总链接: https://www.intel.com/content/www/us/en/programmable/documentation/lit-index.html eg: Pinout(TXT/EXCEL/PDF): https://www.intel.com/content/www/us/en/programmable/support/literature/lit-dp.html?1

intel官方的手册

最近在学习汇编语言,需要用到intel的手册,无论是csdn还是其他的,都要下载币,还不便宜,也很老的资料了。 直接到这个地址:https://software.intel.com/en-us/articles/intel-sdm下载吧,我下载的十…

inter-因特尔-官网

1:查询服务器CPU参数 2:去官网查询CPU指标 英特尔 | 数据中心解决方案、物联网和电脑创新