54个元素扑克牌怎么写-54张扑克牌排序



  • 2026-02-05 11:36:55

1. 扑克牌数据结构表示

python

class PokerCard:

def __init__(self, suit, rank):

self.suit = suit # 花色

self.rank = rank # 点数

def __str__(self):

return f"{self.suit}{self.rank}

def __repr__(self):

return self.__str__

2. 创建完整的54张扑克牌

python

def create_poker_deck:

创建标准的54张扑克牌

suits = ['♠', '♥', '♦', '♣'] # 黑桃、红心、方块、梅花

ranks = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']

deck = []

# 添加52张常规牌

for suit in suits:

for rank in ranks:

deck.append(PokerCard(suit, rank))

# 添加大小王

deck.append(PokerCard('Joker', 'Black')) # 大王

deck.append(PokerCard('Joker', 'Red')) # 小王

return deck

3. 多种排序算法实现

方法一:基于权重的快速排序

python

def get_card_value(card):

获取卡牌的数值用于排序

suit_weights = {'♠': 400, '♥': 300, '♦': 200, '♣': 100}

rank_weights = {

'A': 14, 'K': 13, 'Q': 12, 'J': 11,

'10': 10, '9': 9, '8': 8, '7': 7, '6': 6,

'5': 5, '4': 4, '3': 3, '2': 2

joker_weights = {'Black': 600, 'Red': 500}

if card.suit == 'Joker':

return joker_weights[card.rank]

else:

return suit_weights[card.suit] + rank_weights[card.rank]

def quick_sort_poker(deck):

快速排序实现

if len(deck)

return deck

pivot = deck[len(deck)//2]

left = [card for card in deck if get_card_value(card)

middle = [card for card in deck if get_card_value(card) == get_card_value(pivot)]

right = [card for card in deck if get_card_value(card) > get_card_value(pivot)]

return quick_sort_poker(left) + middle + quick_sort_poker(right)

方法二:冒泡排序

python

def bubble_sort_poker(deck):

冒泡排序实现

n = len(deck)

arr = deck.copy

for i in range(n):

for j in range(0, n-i-1):

if get_card_value(arr[j]) > get_card_value(arr[j+1]):

arr[j], arr[j+1] = arr[j+1], arr[j]

return arr

方法三:内置排序(推荐)

python

def builtin_sort_poker(deck):

使用Python内置排序

return sorted(deck, key=get_card_value)

4. 完整示例代码

python

class PokerCard:

def __init__(self, suit, rank):

self.suit = suit

self.rank = rank

def __str__(self):

return f"{self.suit}{self.rank}

def __repr__(self):

return self.__str__

def create_poker_deck:

suits = ['♠', '♥', '♦', '♣']

ranks = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']

deck = []

for suit in suits:

for rank in ranks:

deck.append(PokerCard(suit, rank))

deck.append(PokerCard('Joker', 'Black'))

deck.append(PokerCard('Joker', 'Red'))

return deck

def get_card_value(card):

suit_weights = {'♠': 100, '♥': 80, '♦': 60, '♣': 40}

rank_weights = {

'A': 20, 'K': 19, 'Q': 18, 'J': 17,

'10': 16, '9': 15, '8': 14, '7': 13, '6': 12,

'5': 11, '4': 10, '3': 9, '2': 8

joker_weights = {'Black': 30, 'Red': 25}

if card.suit == 'Joker':

return joker_weights[card.rank]

else:

return suit_weights[card.suit] + rank_weights[card.rank]

def display_deck(deck, title="扑克牌"):

显示扑克牌

print(f"\

{title}:")

for i, card in enumerate(deck):

print(f"{card}", end=" ")

if (i + 1) % 13 == 0:

print

# 主程序

if __name__ == "__main__":

# 创建扑克牌

deck = create_poker_deck

display_deck(deck, "原始扑克牌")

54个元素扑克牌怎么写-54张扑克牌排序

# 使用不同方法排序

sorted_deck1 = builtin_sort_poker(deck)

aapoker下载地址

display_deck(sorted_deck1, "排序后扑克牌")

# 验证排序结果

values = [get_card_value(card) for card in sorted_deck1]

print(f"\

排序验证: {values == sorted(values)}")

# 统计各花色数量

suit_count = {}

for card in sorted_deck1:

suit_count[card.suit] = suit_count.get(card.suit, 0) + 1

print("\

各花色统计:")

for suit, count in suit_count.items:

print(f"{suit}: {count}张")

5. 排序结果说明

排序后的扑克牌顺序为:

  • 花色顺序: ♠ → ♥ → ♦ → ♣
  • 点数顺序: A → K → Q → J → 10 → 9 → ... → 2
  • 王牌位置: 小王 → 大王(放在最后)
  • 输出示例:

    原始扑克牌:

    ♠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 ♣3 ♣4 ♣5 ♣6 ♣7 ♣8 ♣9 ♣10 ♣J ♣Q ♣K

    JokerRed JokerBlack

    排序后扑克牌:

    ♠A ♠K ♠Q ♠J ♠10 ♠9 ♠8 ♠7 ♠6 ♠5 ♠4 ♠3 ♠2

    ♥A ♥K ♥Q ♥J ♥10 ♥9 ♥8 ♥7 ♥6 ♥5 ♥4 ♥3 ♥2

    ♦A ♦K ♦Q ♦J ♦10 ♦9 ♦8 ♦7 ♦6 ♦5 ♦4 ♦3 ♦2

    ♣A ♣K ♣Q ♣J ♣10 ♣9 ♣8 ♣7 ♣6 ♣5 ♣4 ♣3 ♣2

    JokerRed JokerBlack

    这种方法确保了扑克牌按照标准的桥牌或扑克游戏顺序排列,便于后续的游戏逻辑开发。