python3-欢乐斗地主有序发牌-牌是有序的哟-实战

题目:一副扑克牌有54张,分别为A-K这13种,每种有黑桃,红桃,梅花,方块,共计13*4=52,还有大小王各一张,共54张。

现在要求将牌顺序打乱,然后给3位玩家发牌,每家17张,然后剩下3张作为叫地主的牌。 这里先只需要输入回车打印每位玩家的牌,按照斗地主的大小顺序进行显示输出。

import random

card = [{"\u2660 A":14.03},{"\u2660 2":15.03},{"\u2660 3":3.03},{"\u2660 4":4.03},{"\u2660 5":5.03},
{"\u2660 6":6.03},{"\u2660 7":7.03},{"\u2660 8":8.03},{"\u2660 9":9.03},{"\u2660 10":10.03},
{"\u2660 J":11.03},{"\u2660 Q":12.03},{"\u2660 K":13.03}, #黑桃
{"\u2663 A":14.01},{"\u2663 2":15.01},{"\u2663 3":3.01},{"\u2663 4":4.01},{"\u2663 5":5.01},
{"\u2663 6":6.01},{"\u2663 7":7.01},{"\u2663 8":8.01},{"\u2663 9":9.01},{"\u2663 10":10.01},
{"\u2663 J":11.01},{"\u2663 Q":12.01},{"\u2663 K":13.01}, #梅花
{"\u2666 A":14},{"\u2666 2":15},{"\u2666 3":3},{"\u2666 4":4},{"\u2666 5":5},
{"\u2666 6":6},{"\u2666 7":7},{"\u2666 8":8},{"\u2666 9":9},{"\u2666 10":10},
{"\u2666 J":11},{"\u2666 Q":12},{"\u2666 K":13}, #方块
{"\u2665 A":14.02},{"\u2665 2":15.02},{"\u2665 3":3.02},{"\u2665 4":4.02},{"\u2665 5":5.02},
{"\u2665 6":6.02},{"\u2665 7":7.02},{"\u2665 8":8.02},{"\u2665 9":9.02},{"\u2665 10":10.02},
{"\u2665 J":11.02},{"\u2665 Q":12.02},{"\u2665 K":13.02},{"\u2660 JQK":16},{"\u2666 JQK":17}]

def get_valuse(lst):
    keys = []
    values = []
    for x in lst:
        for k,v in x.items():
            keys.append(k)
            values.append(v)
    return keys,values

random.shuffle(card)
print(card)
count = 0
while count <4:
    s = input("按回车键给玩家发牌: ")
    if not s:
        l2 = card[0+17*count:17+17*count]
        keys,values = get_valuse(l2)
        #获取到发牌的键值列表之后,使用冒泡排序,同时修改键值,这样键和值才能匹配
        for i in range(len(values)):
            for j in range(i,len(values)):
                if values[i] < values[j]:
                    keys[i],keys[j] = keys[j],keys[i]
                    values[i],values[j]= values[j],values[i]
        for i in range(len(values)):
            print(keys[i],end=" ")
        print()

        count +=1

说明:

"\u2660 A":14.03会生成黑桃 A的图案,后面跟的14.03是代表A在斗地主中的大小为14,03代表在A中是最大的,也就是黑桃,以此类推依次是红桃 梅花 方块

大小王暂时没有找到好的表示方式,暂且不去纠结,知道有这么个意思就行了

这里最重要的是通过random.shuffle(card) 在将牌打乱顺序,然后保存在card中,这样就可以直接使用切片的方式给玩家发牌了,每位17张,但是发给玩家之后还是需要通过一个冒泡排序进行排序后输出出来。本身都是字典的列表很难对字典中的值进行排序,主要是字典中的键是完全随机的,所以根本无法通过去键来获得值进行排序。

    原文作者:魔术师发牌问题
    原文地址: https://blog.csdn.net/weixin_41661393/article/details/80370174
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞