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
相关产品推荐
相关产品推荐

