Python判断Perfect Number函数返回None而非False该如何修改
代码问题分析与调整方案
你遇到的返回None的问题,以及代码本身的逻辑问题,需要调整以下两处:
- 仅在「输入小于0」「循环中求和等于输入值」两个分支加了return语句,当非完数走完整个for循环后,函数没有任何返回动作,会默认返回None。需要在函数末尾统一加返回结果的逻辑,覆盖所有执行分支。
- 求和等于原数的判断放在了for循环内部,还没遍历完所有真因子就做判断,本身逻辑不符合完数的计算规则,应该遍历完所有1到number-1的数、算完总因子和之后再做比较。
额外规范建议:不要用sum作为变量名,sum是Python内置的求和函数名,自定义变量覆盖内置函数名属于不规范写法,容易引发后续问题。
修改后的参考代码
def perfect(number): total = 0 is_perfect = False if number < 0: return is_perfect # 遍历所有真因子求和 for i in range(1, number): if number % i == 0: total += i # 求和完成后再判断是否为完数 if total == number: is_perfect = True # 统一返回结果,覆盖所有分支 return is_perfect print(perfect(8)) # 输出False print(perfect(6)) # 输出True
内容的提问来源于stack exchange,提问作者M. Vladimir
相关产品推荐
相关产品推荐

