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

Pyexcel项目中random.choice()运行不符合预期,如何随机选取符合要求的2号角色

问题根因

你的递归函数在触发重抽的if/elif分支中,调用递归后没有返回递归调用的结果,导致只要第一次抽取的元素不符合要求,递归得到的正确结果无法传递回最外层的函数调用,最终返回空值,看起来就像程序终止。你观察到的“元素被固定”是错觉,递归逻辑里实际已经重新抽取了新元素,只是没有把结果返回而已。

修复方案

1. 适配现有递归写法

只需在两个递归调用的位置加上return,把递归结果传递出去即可:

def another_one(sequence):
    item = random.choice(sequence)
    if item[0] == fighter_one:
        return another_one(sequence)
    elif item[1] < 20:
        return another_one(sequence)
    else:
        return item

注意:如果符合要求的角色数量极少,递归写法可能存在栈深度溢出的风险,更推荐使用循环实现。

2. 改用循环实现(更稳定)

逻辑更直观,无递归深度风险:

def another_one(sequence):
    while True:
        item = random.choice(sequence)
        if item[0] != fighter_one and item[1] >= 20:
            return item

3. 预筛选候选池(效率最高)

如果角色数量较多,反复随机抽取的性能损耗较大,可以先筛选出所有符合要求的候选,再一次性随机抽取,还能提前判断是否存在可用角色避免死循环:

# 提前筛选所有符合条件的角色:不是1号选手、pecking值不低于20
candidates = [item for item in sequence if item[0] != fighter_one and item[1] >= 20]
# 直接从候选池随机抽取
fighter_two = random.choice(candidates)

内容的提问来源于stack exchange,提问作者Bryan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:36:03