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

Python快乐数函数异常:is_happy(13)返回True却未出现在结果中

问题原因

你遇到的问题根源在于Python默认参数的特性:函数的默认参数是在函数定义时创建的,而非每次调用函数时重新生成。你的is_happy函数用了result = []作为默认参数,这个列表会在所有is_happy调用之间共享状态。

举个实际场景:

  • 当happy_numbers循环调用is_happy(i)时,第一次调用(比如i=1)会往这个共享列表里添加元素;
  • 后续检查其他数时,result已经不是空列表,导致很多正常的快乐数在计算过程中,会误判next_number已存在于result中,直接返回False,所以13这类正确的快乐数没被加入结果。
修复方案

把is_happy函数的默认参数改为None,并在函数内部初始化空列表,确保每次调用都使用独立的状态:

def is_happy(n, result=None):
    # 每次调用时新建空列表,避免共享状态
    if result is None:
        result = []
    next_number = sum(map(lambda x: int(x) ** 2, str(n)))
    if next_number == 1:
        return True
    elif next_number in result:
        return False
    else:
        result.append(next_number)
        return is_happy(next_number, result)

def happy_numbers(n):
    result = []
    for i in range(1, n + 1):
        if is_happy(i):
            result.append(i)
    return result

修改后,每次调用is_happy都会创建独立的result列表,不会受到之前调用的影响,happy_numbers就能正确收集所有快乐数了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:45:27