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

Python k排列数函数num_permutation_v2错误排查求助

问题排查与修正

核心错误点

  • 调用num_permutation_v2(3)时,k取默认值None,触发else分支。该分支循环里执行ban *= 1,无论循环多少次结果始终是1,这就是断言失败的直接原因。
  • 条件判断冗余:elif k is not None and k == 0的情况已经被第一个条件0<=k<=n覆盖,完全没必要单独定义。
  • 计算逻辑可优化:先算n!再除以(n-k)!的方式,当n较大时会产生不必要的大整数运算,直接连乘n*(n-1)*...*(n-k+1)更高效。

修正后的代码

def num_permutation_v2(n, k=None):
    """Compute the number of k-permutations of n items.

    Parameters
    ----------
    n: int
        Number of items to permute.
    k: int
        Optional argument indicating the size of each permutation.
        Default: n

    Returns
    -------
    int:
        Number of k-permutations of n items.
    """
    # 处理默认参数,k为None时等价于全排列
    if k is None:
        k = n
    
    # 边界条件:k不在合法范围返回0,k=0时返回1(排列定义)
    if k < 0 or k > n:
        return 0
    if k == 0:
        return 1
    
    # 计算k排列数:n*(n-1)*...*(n-k+1)
    result = 1
    for i in range(k):
        result *= (n - i)
    return result

验证测试

  • 运行assert num_permutation_v2(3) == 6会通过
  • num_permutation_v2(5, 2)返回20,符合计算逻辑
  • num_permutation_v2(4, 0)返回1,符合排列定义
  • num_permutation_v2(3, 4)返回0,非法输入处理正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 15:55:20