关于求解完数
"""问题描述,如果一个数等于它的因子之和,则称该数为完数,如6的因子为1,2,3,而6=1+2+3,故6为完数"""在下面代码中,设置i_add变量用于存储所有因子之和,但为什么i_add的位置不同,执行结果就完全不一样呢,请大咖们给予解答,感谢!
num = int(input("你想输出多少以内的完数:"))
count = 0
# i_add = 0# 该变量在for循环外,和循环内,效果完全不一样!!
for num in range(1, num+1):
i_add = 0# 该变量在for循环外,和循环内,效果完全不一样!!
for i in range(1, num):
if num % i == 0:
i_add += i
if num == i_add:
print(f"{num}是完数")
count += 1
print(f"{num}以内有完数{count}个") i_add 在 for 循环外面,初始化(设 0)只有 1 次
i_add 在 for 循环里面,每次循环都初始化(设 0),其初始化次数和循环次数相同 你放在外面的话,i_add 经过一次for以后不会清零
例如i_add经过一次循环后变成1,再次循环后i_add的值是从1开始的,这样就会影响你后面 num==i_add的结果
因为判断第一个数是不是因数(前一个循环)的值被加到后一个循环里面了(判断第二个数是不是因数)
而放在里面,每次判断完一个数后,i_add又归零,重新开始计算再判断就可行
页:
[1]