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”键及其相应的值添加到字典中,而不会引发任何错误。