Python从列表查找Happy Number时代码无返回结果问题排查
快乐数筛选代码问题排查与修正
你写的代码存在多处逻辑错误,导致无法正常输出结果,具体问题点如下:
- 未定义存储结果的列表
b就直接调用append方法,运行时会直接抛出NameError - 逐位拆分数字的逻辑错位:遍历数字每一位的循环里反复将求和变量重置为0,循环结束后仅保留了数字的最后一位,后续平方计算完全无效
- 平方和计算逻辑位置错误:逐位拆分求平方和的步骤应该放在while循环内部,每次计算完新的平方和后,要对新的数值再次逐位拆分,直到触发终止条件,原代码只对初始数字的最后一位反复做平方计算,会直接触发死循环
- 返回语句缩进错误:
return b被放在了for循环的内部,遍历完列表第一个元素就会直接终止函数执行,不会处理列表剩余元素 - 求和变量初始逻辑错误:原代码在逐位遍历前把sum赋值为当前遍历到的列表元素,进入逐位循环后又立刻把sum设为0,初始值完全丢失
修正后的可运行代码如下:
a = [1, 4, 7, 82] def is_happy(num_list): res = [] for num in num_list: current = num # 用快乐数通用终止规则:收敛到1为快乐数,收敛到4为非快乐数,避免死循环 while current != 1 and current != 4: square_sum = 0 # 逐位计算平方和 for d in str(current): square_sum += int(d) ** 2 current = square_sum if current == 1: res.append(num) return res print(is_happy(a))
代码运行输出结果为[1, 7, 82],符合快乐数的判定规则。
内容的提问来源于stack exchange,提问作者Eminos
相关产品推荐
相关产品推荐

