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

递归实现War卡牌游戏函数在Python for循环中随机终止问题求助

问题根源

  1. 递归栈容量不足:你设置了5000的递归上限,但部分对局的回合数可能超过这个值,而且Python不支持尾递归优化,递归次数过多会直接耗尽栈空间,导致程序悄无声息停止,甚至不抛出错误。
  2. 平局处理逻辑缺失:当双方平局但某一方牌数不足以继续"战争"时,代码直接返回当前回合数,没有处理胜负判定和剩余牌堆的归属,这会导致游戏未正常结束,进而引发卡壳或异常。
  3. 极小概率无限循环:尽管加入了洗牌逻辑,但极端情况下牌堆会进入循环往复的状态,递归会持续运行直至程序崩溃。

解决办法

把递归实现改成循环结构,彻底解决递归栈限制问题,同时补全平局场景的处理逻辑:

修复后的代码

import random

def war_game(l1, l2):
    count = 0
    index = 0
    while l1 and l2:
        count += 1
        if l1[index] > l2[index]:
            # 赢方拿走本轮所有牌,洗牌后追加到牌堆尾部
            won_cards = l2[:index+1] + l1[:index+1]
            random.shuffle(won_cards)
            l1 = l1[index+1:] + won_cards
            l2 = l2[index+1:]
            index = 0
        elif l2[index] > l1[index]:
            won_cards = l2[:index+1] + l1[:index+1]
            random.shuffle(won_cards)
            l2 = l2[index+1:] + won_cards
            l1 = l1[index+1:]
            index = 0
        else:
            # 平局,检查双方是否有足够牌继续战争
            if len(l1) > index + 3 and len(l2) > index + 3:
                index += 3
            else:
                # 牌量不足的一方直接判输,赢方拿走所有剩余牌
                if len(l1) <= index + 3:
                    l2.extend(l1)
                    l1 = []
                else:
                    l1.extend(l2)
                    l2 = []
                break
    return count

array = [0] * 5000
for item in range(1000):
    # 生成牌组,保留了你原来的54张牌配置,若要玩标准52张可删除末尾两个13
    CardDeck = [num for num in range(13) for _ in range(4)] + [13, 13]
    random.shuffle(CardDeck)
    half = len(CardDeck) // 2
    result = war_game(CardDeck[:half], CardDeck[half:])
    if result < 5000:
        array[result] += 1
    else:
        print(f"第{item}局回合数超过5000")
    print(f"{item}:{result}")
print(array)

改动说明

  • 迭代替代递归:用while循环彻底替代递归调用,摆脱递归深度限制,支持任意回合数的对局。
  • 补全平局处理:当某一方牌数不足时,直接判定胜负并合并剩余牌堆,确保游戏能正常结束。
  • 优化牌组生成:用列表推导式简化牌组创建逻辑,比手动罗列更清晰易维护。
  • 增加边界防护:处理回合数超过5000的场景,避免数组越界报错。

内容的提问来源于stack exchange,提问作者אור כהן

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:31:22