【python实现扑克牌小游戏】python使用权重排序扑克牌

文章目录


一、如何洗牌

思路

1、准备一副有序的牌(使用list来实现)

2、遍历这个list,并将遍历到的元素放入set集合中就能将牌打乱

3、再将其分为四部分(三个玩家牌和地主牌)

洗牌方法的所有代码

python 复制代码
pokerList = []
playerOneList = []
playerTwoList = []
playerThreeList = []
dizhuList = []
def shufflePoker():
    pokerSet = set()
    colourList = ["♣","♠","♦","♥"]
    numList = ["3","4","5","6","7","8","9","10","J","Q","K","A","2"]
    for num in numList:
        for colour in colourList:
            pokerList.append(colour + num)
    pokerList.append("小王")
    pokerList.append("大王")

    for poker in pokerList:
        pokerSet.add(poker)

    count = 0
    for poker in pokerSet:
        if count == 51 or count == 52 or count == 53:
            dizhuList.append(poker)
        elif count % 3 == 0:
            playerOneList.append(poker)
        elif count % 3 == 1:
            playerTwoList.append(poker)
        elif count % 3 == 2:
            playerThreeList.append(poker)
        count += 1

二、如何排序扑克牌

思路

1、设置两个字典dict,里面定义每个花色和扑克数的权重(大小王的权重额外定义):

python 复制代码
num_weights = {"3":1,"4":2,"5":3,"6":4,"7":5,"8":6,"9":7,"10":8,"J":9,"Q":10,"K":11,"A":12,"2":13}
colour_weight = {"♣":1,"♠":2,"♦":3,"♥":4}

2、循环洗完牌之后的集合,计算集合中每张牌的权重:

因为花色和扑克数都有权重,所以用元组(tuple)接收权重最合适,使用list也可以

python 复制代码
	weightList = []
    for poker in playerList:
    	# 大小王的花色和扑克数的权重额外定义
        if poker == "小王":
            weightList.append((14,5))
        elif poker == "大王":
            weightList.append((15,6))
        else:
            poker_colour = poker[:1]
            poker_num = poker[1:]
            # 使用元组接收权重
            weightList.append((num_weights[poker_num],colour_weight[poker_colour]))

3、将转变之后的权重排序:

python 复制代码
sortedWeightList = sorted(weightList)

4、将排序之后的list中的每个元组元素转变为对应的花色和扑克数(在第一步定义的字典中查找):

使用python推导式来获取

排序之后的list循环出来是一个个元组

python 复制代码
pokerWeightList = []
	# 循环遍历出来的是一个个元组
    for poker in sortedWeightList:
        if poker[0] == 14:
            pokerWeightList.append("小王")
        elif poker[0] == 15:
            pokerWeightList.append("大王")
        else:
            colour = [k for k,v in colour_weight.items() if int(poker[1]) == v]
            num = [k for k,v in num_weights.items() if int(poker[0]) == v]
            str1 = colour[0] + num[0]
            pokerWeightList.append(str1)

排序方法的所有代码

python 复制代码
def sortPoker(playerList):
    num_weights = {"3":1,"4":2,"5":3,"6":4,"7":5,"8":6,"9":7,"10":8,"J":9,"Q":10,"K":11,"A":12,"2":13}
    colour_weight = {"♣":1,"♠":2,"♦":3,"♥":4}
    weightList = []
    for poker in playerList:
        if poker == "小王":
            weightList.append((14,5))
        elif poker == "大王":
            weightList.append((15,6))
        else:
            poker_colour = poker[:1]
            poker_num = poker[1:]
            weightList.append((num_weights[poker_num],colour_weight[poker_colour]))

    sortedWeightList = sorted(weightList)
    pokerWeightList = []
    for poker in sortedWeightList:
        if poker[0] == 14:
            pokerWeightList.append("小王")
        elif poker[0] == 15:
            pokerWeightList.append("大王")
        else:
            colour = [k for k,v in colour_weight.items() if int(poker[1]) == v]
            num = [k for k,v in num_weights.items() if int(poker[0]) == v]
            str1 = colour[0] + num[0]
            pokerWeightList.append(str1)
    return pokerWeightList

三、如何叫地主

思路

输入抢地主的玩家,然后判断输入内容为哪个玩家,并将地主牌和这个玩家的牌合并:

叫地主的所有代码

python 复制代码
def lookPoker(dizhu):
    if dizhu == playerOne:
        playerOneList1 = playerOneList + dizhuList
        newPlayerOneList = sortPoker(playerOneList1)
        newPlayerTwoList = sortPoker(playerTwoList)
        newPlayerThreeList = sortPoker(playerThreeList)
        print(f'{playerOne}玩家的牌是:' + ','.join(newPlayerOneList))
        print(f'{playerTwo}玩家的牌是:' + ','.join(newPlayerTwoList))
        print(f'{playerThree}玩家的牌是:' + ','.join(newPlayerThreeList))
    elif dizhu == playerTwo:
        playerTwoList1 = playerTwoList + dizhuList
        newPlayerOneList = sortPoker(playerOneList)
        newPlayerTwoList = sortPoker(playerTwoList1)
        newPlayerThreeList = sortPoker(playerThreeList)
        print(f'{playerOne}玩家的牌是:' + ','.join(newPlayerOneList))
        print(f'{playerTwo}玩家的牌是:' + ','.join(newPlayerTwoList))
        print(f'{playerThree}玩家的牌是:' + ','.join(newPlayerThreeList))
    elif dizhu == playerThree:
        playerThreeList1 = playerThreeList + dizhuList
        newPlayerOneList = sortPoker(playerOneList)
        newPlayerTwoList = sortPoker(playerTwoList)
        newPlayerThreeList = sortPoker(playerThreeList1)
        print(f'{playerOne}玩家的牌是:' + ','.join(newPlayerOneList))
        print(f'{playerTwo}玩家的牌是:' + ','.join(newPlayerTwoList))
        print(f'{playerThree}玩家的牌是:' + ','.join(newPlayerThreeList))
    else:
        print("没有这个玩家!!!")

四、全部代码

python 复制代码
pokerList = []
playerOneList = []
playerTwoList = []
playerThreeList = []
dizhuList = []
def shufflePoker():
    pokerSet = set()
    colourList = ["♣","♠","♦","♥"]
    numList = ["3","4","5","6","7","8","9","10","J","Q","K","A","2"]
    for num in numList:
        for colour in colourList:
            pokerList.append(colour + num)
    pokerList.append("小王")
    pokerList.append("大王")

    for poker in pokerList:
        pokerSet.add(poker)

    count = 0
    for poker in pokerSet:
        if count == 51 or count == 52 or count == 53:
            dizhuList.append(poker)
        elif count % 3 == 0:
            playerOneList.append(poker)
        elif count % 3 == 1:
            playerTwoList.append(poker)
        elif count % 3 == 2:
            playerThreeList.append(poker)
        count += 1


def sortPoker(playerList):
    num_weights = {"3":1,"4":2,"5":3,"6":4,"7":5,"8":6,"9":7,"10":8,"J":9,"Q":10,"K":11,"A":12,"2":13}
    colour_weight = {"♣":1,"♠":2,"♦":3,"♥":4}
    weightList = []
    for poker in playerList:
        if poker == "小王":
            weightList.append((14,5))
        elif poker == "大王":
            weightList.append((15,6))
        else:
            poker_colour = poker[:1]
            poker_num = poker[1:]
            weightList.append((num_weights[poker_num],colour_weight[poker_colour]))

    sortedWeightList = sorted(weightList)
    pokerWeightList = []
    for poker in sortedWeightList:
        if poker[0] == 14:
            pokerWeightList.append("小王")
        elif poker[0] == 15:
            pokerWeightList.append("大王")
        else:
            colour = [k for k,v in colour_weight.items() if int(poker[1]) == v]
            num = [k for k,v in num_weights.items() if int(poker[0]) == v]
            str1 = colour[0] + num[0]
            pokerWeightList.append(str1)
    return pokerWeightList

def lookPoker(dizhu):
    if dizhu == playerOne:
        playerOneList1 = playerOneList + dizhuList
        newPlayerOneList = sortPoker(playerOneList1)
        newPlayerTwoList = sortPoker(playerTwoList)
        newPlayerThreeList = sortPoker(playerThreeList)
        print(f'{playerOne}玩家的牌是:' + ','.join(newPlayerOneList))
        print(f'{playerTwo}玩家的牌是:' + ','.join(newPlayerTwoList))
        print(f'{playerThree}玩家的牌是:' + ','.join(newPlayerThreeList))
    elif dizhu == playerTwo:
        playerTwoList1 = playerTwoList + dizhuList
        newPlayerOneList = sortPoker(playerOneList)
        newPlayerTwoList = sortPoker(playerTwoList1)
        newPlayerThreeList = sortPoker(playerThreeList)
        print(f'{playerOne}玩家的牌是:' + ','.join(newPlayerOneList))
        print(f'{playerTwo}玩家的牌是:' + ','.join(newPlayerTwoList))
        print(f'{playerThree}玩家的牌是:' + ','.join(newPlayerThreeList))
    elif dizhu == playerThree:
        playerThreeList1 = playerThreeList + dizhuList
        newPlayerOneList = sortPoker(playerOneList)
        newPlayerTwoList = sortPoker(playerTwoList)
        newPlayerThreeList = sortPoker(playerThreeList1)
        print(f'{playerOne}玩家的牌是:' + ','.join(newPlayerOneList))
        print(f'{playerTwo}玩家的牌是:' + ','.join(newPlayerTwoList))
        print(f'{playerThree}玩家的牌是:' + ','.join(newPlayerThreeList))
    else:
        print("没有这个玩家!!!")




print("************* 欢迎进入 欢乐 斗地主 *************")
playerOne = input("请输入第一位玩家的姓名")
playerTwo = input("请输入第二位玩家的姓名")
playerThree = input("请输入第三位玩家的姓名")
def pokerMain():
    print("-"*50)
    print("洗牌中。。。")
    print("-" * 50)
    shufflePoker()
    print("洗牌完成")
    print("-" * 50)
    print("发牌中。。。")
    print("-" * 50)
    print("发牌完成")
    print("-" * 50)

    dizhu = input("请输入叫地主的玩家:")
    lookPoker(dizhu)

pokerMain()
相关推荐
豌豆花下猫15 分钟前
Python 潮流周刊#118:Python 异步为何不够流行?(摘要)
后端·python·ai
THMAIL20 分钟前
深度学习从入门到精通 - LSTM与GRU深度剖析:破解长序列记忆遗忘困境
人工智能·python·深度学习·算法·机器学习·逻辑回归·lstm
wheeldown1 小时前
【数学建模】数据预处理入门:从理论到动手操作
python·数学建模·matlab·python3.11
多打代码1 小时前
2025.09.05 用队列实现栈 & 有效的括号 & 删除字符串中的所有相邻重复项
python·算法
@CLoudbays_Martin111 小时前
为什么动态视频业务内容不可以被CDN静态缓存?
java·运维·服务器·javascript·网络·python·php
程序猿炎义2 小时前
【NVIDIA AIQ】自定义函数实践
人工智能·python·学习
THMAIL2 小时前
深度学习从入门到精通 - BERT与预训练模型:NLP领域的核弹级技术详解
人工智能·python·深度学习·自然语言处理·性能优化·bert
nuclear20113 小时前
Python 实现 Markdown 与 Word 高保真互转(含批量转换)
python·word转markdown·markdown转word·word转md·md转word
山烛3 小时前
深度学习:CNN 模型训练中的学习率调整(基于 PyTorch)
人工智能·pytorch·python·深度学习·cnn·调整学习率