使用python 2.7.6空闲的不同结果作为编辑器

时间:2014-06-05 09:39:50

标签: python list python-2.7 python-idle

尝试检查数字是否完美并使用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)

2 个答案:

答案 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