You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现麻将手牌自动排序:如何比较当前元组与前一个元组来插入正确位置?

Python实现麻将手牌自动排序:如何比较当前元组与前一个元组来插入正确位置?

嘿,我来帮你搞定这个问题!首先咱们先解决你遇到的语法错误,然后再说说更简单靠谱的手牌排序方法~

先看你的语法错误原因

你写的这行代码:

if ((number+(suit*9)(myHand[i-1]))<number+(suit*9):

有两个明显问题:

  1. 括号不匹配:条件判断的括号没闭合,导致语法报错
  2. 逻辑写法错误:你想拿前一张牌的number + suit*9做比较,但没正确解包myHand[i-1]这个元组,直接把元组当函数调用的写法完全不对

就算你修复了括号,这个逻辑本身也有问题——你只和前一张牌比较就直接插在第1位,根本不是正确的插入排序逻辑,会导致手牌排序混乱(比如当前牌比前一张小,但比更前面的牌大,插在第1位就错了)。

更简单高效的解决方案:直接对整个手牌排序

其实完全不用写复杂的插入判断,麻将的排序逻辑非常清晰:先按花色分组,同花色内按数字从小到大排序,咱们直接用Python的sorted()函数就能搞定,代码简洁还不容易出错。

你的myHand是元组列表,每个元组结构是(tile, number, suit),排序时指定key为(花色, 数字),就能自动把同花色的牌归为一组,同花色内按数字顺序排列,完美符合麻将手牌的使用习惯。

优化后的完整代码片段

把你原来的“make readable UI version”部分替换成下面的内容,同时可以删掉那些没用的var0~var33变量:

# 对我的手牌进行排序:先按花色分组,同花色内按数字排序
myHand_sorted = sorted(myHand, key=lambda card: (card[2], card[1]))

# 转换为可读的可视化手牌
visibleHand = []
for tile, number, suit in myHand_sorted:
    # 用字典映射替换数字和花色名称
    display_number = numbers.get(number, number)
    display_suit = suits.get(suit, suit)
    visibleHand.append(f"{display_number} {display_suit}")

print(visibleHand)

为什么这个方法更好?

  1. 代码更简洁:一行sorted()就搞定排序,不用写复杂的插入判断
  2. 排序更准确:确保整个手牌完全按花色+数字有序,不会出现局部混乱
  3. 易维护:如果以后要调整排序规则(比如改变花色优先级),只需要修改排序key就行

修复你原来的插入式排序(不推荐,仅作参考)

如果你坚持想用逐个插入的方式,正确的写法应该是这样(但真的没必要这么麻烦):

visibleHand = []
# 先把所有手牌转成带排序值的元组,方便比较
hand_with_rank = []
for tile, number, suit in myHand:
    rank = suit * 9 + number
    display_str = f"{numbers.get(number, number)} {suits.get(suit, suit)}"
    hand_with_rank.append( (rank, display_str) )

# 插入排序逻辑
for rank, card_str in hand_with_rank:
    inserted = False
    for idx in range(len(visibleHand)):
        # 取出已插入牌的排序值
        existing_rank, _ = hand_with_rank[idx]
        if rank < existing_rank:
            visibleHand.insert(idx, card_str)
            inserted = True
            break
    if not inserted:
        visibleHand.append(card_str)

print(visibleHand)

这种方式需要额外维护排序值,代码冗余且容易出错,还是推荐用直接排序的方法。

备注:内容来源于stack exchange,提问作者Anonymous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 15:39:34