尝试检查数字是否完美并使用python 2.7 IDLE作为编辑器我注意到当我在同一个脚本中询问时,如果两个数字(6和28)都是完美数字,则结果为True,False,第一个是真,第二个不是。但是当我只询问第二个时,只有数字' 28'结果是真的。我无法理解原因。
p=[1]
def isPerfect(n):
for i in range(2,n-1):
if n%i == 0:
p.append(i)
if n == sum(p):
return True
return False
print 'number 6 is perfect ?', isPerfect(6)
print 'number 28 is perfect ?', isPerfect(28)
答案 0 :(得分:1)
问题是你正在编辑p的值,但是在下次调用isPerferct()
之前没有清除它,因此前一个调用的值仍在列表p中,这会导致问题。如果您在通话后打印p的值,您将了解问题。
p=[1]
def isPerfect(n):
for i in range(2,n-1):
if n%i == 0:
p.append(i)
if n == sum(p):
return True
return False
print 'number 6 is perfect ?', isPerfect(6)
print p # [1, 2, 3]
print 'number 28 is perfect ?', isPerfect(28)
print p # [1, 2, 3, 2, 4, 7, 14]
要修复它,要么在方法内部声明p,要么在方法开头只用[1]重新初始化p。
def isPerfect(n):
p = [1]
for i in range(2,n-1):
if n%i == 0:
p.append(i)
if n == sum(p):
return True
return False
答案 1 :(得分:0)
你将p声明为全局变量,在你的函数中声明它。
def isPerfect(n):
p=[1]
for i in range(2,n-1):
if n%i == 0:
p.append(i)
if n == sum(p):
return True
return False