import random def create_deck(): """创建一副包含54张牌的扑克牌""" suits = ['♠', '♥', '♣', '♦'] ranks = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A'] jokers = ['大王', '小王'] deck = [(suit, rank) for suit in suits for rank in ranks] + jokers return deck def shuffle_deck(deck): """洗牌操作""" random.shuffle(deck) def deal_cards(deck): """发牌给三个玩家和确定底牌,同时随机选择地主并分配底牌""" players = [[], [], []] base_cards = deck[-3:] deck = deck[:-3] random.shuffle(base_cards) for i, card in enumerate(deck): player_index = i % 3 players[player_index].append(card) landlord_index = random.randint(0, 2) players[landlord_index].extend(base_cards) print(f"玩家{landlord_index + 1}是地主") return players, landlord_index def sort_and_show_cards(cards, title=""): """排序并显示玩家或底牌""" sorted_cards = sorted(cards, key=lambda x: (x[0] != '♠', x[0] != '♥', x[1])) print(title) for card in sorted_cards: if isinstance(card, tuple): print(f"{card[0]}{card[1]}", end=" ") else: print(card, end=" ") print("\n")
程序分析:
1. 导入模块
Python
1import random
- 导入
random
模块,用于洗牌和随机选择地主。
2. 定义函数
create_deck()
- 该函数创建了一副完整的扑克牌,包括4种花色(黑桃、红心、梅花、方块)的13种牌面(2至A)以及两张大小王,共计54张牌。
shuffle_deck(deck)
- 接受一副牌作为输入参数,使用
random.shuffle()
方法洗牌,即重新随机排序牌组。
deal_cards(deck)
- 该函数负责发牌。首先,从牌组中分配51张牌给3个玩家,每人17张,按顺序轮流出牌。剩余的3张牌作为底牌。这里假设发牌过程中不直接指定地主,也没有实现地主选底牌的过程。
show_player_cards(player_cards)
- 显示指定玩家的牌。遍历玩家手中的牌,如果是普通牌(花色+数值),则连同花色和数值一起打印;若是大小王,则直接打印名称。
3. 主程序
- 程序主体部分首先创建牌组,接着洗牌,然后发牌给三个玩家,并显示每个玩家的牌以及底牌。