Python学习demo01 创建牌->洗牌->发牌->整理牌

"""
启动后输入玩家数量和扑克牌副数,创建牌->洗牌->发牌->整理牌
"""

import random

puke = ['3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A', '2']
pukeType = ['♠', '♥', '♣', '♦']

class Puke:
    def __init__(self, player: int, count: int):
        self.player = player
        self.count = count
        self.puke = []
        self.player_pk = []
        self.create_puke()
        self.xi_pai()
        self.fa_pai()
        self.sorted_pk()

    # 生成牌
    def create_puke(self):
        print('-------------------------------开始生成扑克----------------------------')
        for i in range(0, self.count):
            print('正在生成第%d副扑克' % (i + 1))
            for j in range(0, len(pukeType)):
                for k in range(0, len(puke)):
                    self.puke.append(str(j) + str(k))
        print('生成扑克完成,共%d' % len(self.puke))
        self.print_pk('生成的扑克:', self.puke)

    # 洗牌
    def xi_pai(self):
        random.shuffle(self.puke)
        self.print_pk('洗牌后的扑克:', self.puke)

    # 发牌
    def fa_pai(self):
        # 创建玩家位置
        for i in range(0, self.player):
            self.player_pk.append([])

        print('开始发牌')
        for index, pk in enumerate(self.puke):
            self.player_pk[index % self.player].append(pk)

        for i in range(0, self.player):
            self.print_pk("第%d手上的牌" % (i + 1), self.player_pk[i])
            print("第%d手上的有%d张牌" % (i + 1, len(self.player_pk[i])))
        print('--------------------------------发牌结束-------------------------------')

    # 整理玩家手上的牌
    def sorted_pk(self):
        print('--------------------------------开始整理玩家手上的牌-------------------------------')
        for i in range(0, self.player):
            self.print_pk("整理前第%d手上的牌" % (i + 1), self.player_pk[i])
            self.player_pk[i].sort(key=lambda elem: int(elem[1:]))
            self.print_pk("整理后第%d手上的牌" % (i + 1), self.player_pk[i])
        print('--------------------------------整理牌完成-------------------------------')


    # 打印类
    def print_pk(self, hint: str, lists: list):
        print('-------------------------------------------------------------')
        print(hint)
        for index, value in enumerate(lists):
            # 使用类似java的三目运算  true的结果 if 条件 else false结果
            print(str(pukeType[int(value[0: 1])]) + str(puke[int(value[1:])]),
                  end=('' if index != len(lists) - 1 else '\r\n'))

测试调用代码

from Puke import Puke

if __name__ == '__main__':
    print('---------------------Welcome!!---------------------')
    try:
        player = int(input('请输入玩家数:'))
        count = int(input('请输入使用几副扑克:'))
    except ValueError:
        print('---------------------自动退出,请输入正确的数字!!!----------------------')
        exit()
    # print('player:' + player + "" + count)
    print('欢迎%d位玩家,共%d副扑克。' % (player, count))
    puke = Puke(player, count)

输出结果:


---------------------Welcome!!---------------------
请输入玩家数:4
请输入使用几副扑克:1
欢迎4位玩家,共1副扑克。
-------------------------------开始生成扑克----------------------------
正在生成第1副扑克
生成扑克完成,共52
-------------------------------------------------------------
生成的扑克:
♠3♠4♠5♠6♠7♠8♠9♠10♠J♠Q♠K♠A♠2♥3♥4♥5♥6♥7♥8♥9♥10♥J♥Q♥K♥A♥2♣3♣4♣5♣6♣7♣8♣9♣10♣J♣Q♣K♣A♣2♦3♦4♦5♦6♦7♦8♦9♦10♦J♦Q♦K♦A♦2
-------------------------------------------------------------
洗牌后的扑克:
♦10♣J♥9♣4♠5♣5♥Q♠A♥A♣10♠7♠4♦A♠8♠Q♣Q♥8♦7♣3♣9♠2♦K♥2♦2♦6♠3♠K♠10♣8♠9♥10♣K♥4♦3♠6♥5♥K♦4♦9♣A♦J♣6♥6♣2♥J♣7♥3♦8♠J♦Q♦5♥7
开始发牌
-------------------------------------------------------------
第1手上的牌
♦10♠5♥A♦A♥8♠2♦6♣8♥4♥K♦J♥J♠J
第1手上的有13张牌
-------------------------------------------------------------
第2手上的牌
♣J♣5♣10♠8♦7♦K♠3♠9♦3♦4♣6♣7♦Q
第2手上的有13张牌
-------------------------------------------------------------
第3手上的牌
♥9♥Q♠7♠Q♣3♥2♠K♥10♠6♦9♥6♥3♦5
第3手上的有13张牌
-------------------------------------------------------------
第4手上的牌
♣4♠A♠4♣Q♣9♦2♠10♣K♥5♣A♣2♦8♥7
第4手上的有13张牌
--------------------------------发牌结束-------------------------------
--------------------------------开始整理玩家手上的牌-------------------------------
-------------------------------------------------------------
整理前第1手上的牌
♦10♠5♥A♦A♥8♠2♦6♣8♥4♥K♦J♥J♠J
-------------------------------------------------------------
整理后第1手上的牌
♥4♠5♦6♥8♣8♦10♦J♥J♠J♥K♥A♦A♠2
-------------------------------------------------------------
整理前第2手上的牌
♣J♣5♣10♠8♦7♦K♠3♠9♦3♦4♣6♣7♦Q
-------------------------------------------------------------
整理后第2手上的牌
♠3♦3♦4♣5♣6♦7♣7♠8♠9♣10♣J♦Q♦K
-------------------------------------------------------------
整理前第3手上的牌
♥9♥Q♠7♠Q♣3♥2♠K♥10♠6♦9♥6♥3♦5
-------------------------------------------------------------
整理后第3手上的牌
♣3♥3♦5♠6♥6♠7♥9♦9♥10♥Q♠Q♠K♥2
-------------------------------------------------------------
整理前第4手上的牌
♣4♠A♠4♣Q♣9♦2♠10♣K♥5♣A♣2♦8♥7
-------------------------------------------------------------
整理后第4手上的牌
♣4♠4♥5♥7♦8♣9♠10♣Q♣K♠A♣A♦2♣2
--------------------------------整理牌完成-------------------------------

Process finished with exit code 0
 

上一篇:变量作用域


下一篇:2021-10-14