python 实现记牌器原理

方案一(减牌记牌)

假设与这“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] += 1

    def 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 += 1
        if n == 4:
            break
    else:
        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”键及其相应的值添加到字典中,而不会引发任何错误。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
python是一种用于录卡游戏中玩家所出的并推演剩余的工具。在QQ游戏“升级”中,有一个名为“升级”的自动,它可以实时自动录每局出,并推演剩下什么,还可以在每局游戏结束时自动保存录。该的功能可以通过在Python的运行环境中运行一个名为"recorder/SHENGJI.py"的脚本来实现。 关于python实现原理,有两种方案。方案一是减,***开发图形化编程界面,比如使用PyQt5图形化编程界面。你可以使用PyCharm来搭建pyqt5开发环境,具体的安装步骤可以参考相关教程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [QQCardRecorder:QQ游戏 欢乐升级 ](https://download.csdn.net/download/weixin_42107165/19783580)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [python 实现原理](https://blog.csdn.net/weixin_43724249/article/details/130462030)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [如何用Python制作图形化界面?PyCharm搭建pyqt5开发环境](https://blog.csdn.net/kobepaul123/article/details/120373783)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值