作业 模拟斗地主发牌

作业 模拟斗地主发牌

"""
创建者:卢俊杰
创建时间:2022/12/27,16:48
"""
from random import randrange

# 全局变量 后面补发需要重新重新弄一个生成器 会重置变量 只能这样弄
all_cards = list(range(0, 54))
length = 54


def send_card(nums):
    """
    发牌
    :param nums:发一次牌的张数
    :return:
    """

    for _ in range(0, 54, nums):
        send_cards = []
        # 发nums张牌
        for _ in range(0, nums):
            global length
            send_cards.append(all_cards.pop(randrange(0, length)))
            length -= 1
        # 发牌
        yield send_cards


def numbers_to_card():
    """
    牌与数字的对应关系
    :return:
    """
    huase_card = ['♠', '♥', '♣', '方块']
    numbers_card = ['2', '3', '4', '5', '6', '7', '8', '9','10', 'j', 'q', 'k', 'a']
    x = 0
    all_cards = {}
    for i in huase_card:
        for j in numbers_card:
            all_cards[x] = i + j
            x += 1
    all_cards[52] = '大王'
    all_cards[53] = '小王'
    return all_cards


def receive_card(nums):
    """
    接收牌
    :return:
    """
    my_list = []
    # 发num*n张牌
    send = send_card(nums)
    for i in range(0, 16, nums):
        # 重用生成器
        my_list.extend(next(send))
    # 补发余数张牌 需要新的生成器
    my_list.extend(next(send_card(17 % nums)))
    sorted(my_list)
    joke_dict = numbers_to_card()
    card_list = [joke_dict[i] for i in my_list]
    return card_list


print(receive_card(4))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值