Python完美数判定算法重复打印结果,如何修正?
完美数判断代码的修正方案
原代码有两个主要问题,导致重复输出甚至报错:
- 变量名不匹配:代码里用了未定义的
n,但实际接收输入的变量是number,运行时会直接报错。 - 判断逻辑放错位置:把判断是否为完美数的代码塞在了
for循环里面,导致每遍历一个数就打印一次结果,出现一堆重复输出。
修正后的代码
number = int(input("Please, type a number to check if this is a perfect number: ")) test = 0 # 优化循环范围:真因数最大不会超过原数的一半,减少循环次数 for i in range(1, number // 2 + 1): if number % i == 0: test += i # 等所有因数求和完成后,再统一判断输出 if test == number: print(number, "is a perfect number") else: print(number, "is not a perfect number")
修正细节
- 变量名统一:把所有写错的
n改成实际变量number,解决未定义变量的报错问题。 - 调整判断位置:把判断逻辑移到循环外面,等把所有真因数的和算完之后,只做一次判断和输出,彻底解决重复打印的问题。
- 循环范围优化:把循环从
range(1, number)改成range(1, number//2 +1)——因为一个数的真因数不可能比它的一半还大(除了自身,但真因数不包含自身),这样能少跑一半的循环,效率更高。
测试输入6的话,代码会先算出1+2+3=6,循环结束后判断相等,只输出一次6 is a perfect number,完全符合预期。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

