为什么我的代码显示错误的输出?

时间:2018-10-02 12:40:16

标签: python python-3.x

我编写了一个代码,当输入的数字是一个完美的数字时,输出“是”,而当数字不是一个完美的数字时,输出“否”。但是当我输入6时,它输出“否”。当除数之和等于原始输入时,我已指定它使用if-else语句打印“是”。为什么输出错误?

n=int(input())

myList=[]

for i in range(1,n):
    if n%i==0:
        myList.append(n)

sum=0
for i in range(0,len(myList)):
    sum=sum+myList[i]

if sum==n:
    print("Yes")
else:
    print("No")

2 个答案:

答案 0 :(得分:1)

对于我以前的回答感到困惑,我们深表歉意。问题是您在n中附加了i而不是myList.append(n)。此外,您可以简单地使用sum来汇总列表。

您的输出是错误的,因为您要附加数字n,因此,当您执行sum=sum+myList[i]时,您只是将n加上了三遍,而不是加上1,2 ,3到sum,您要添加6、6、6。

n=int(input())
myList=[]

for i in range(1,n):
    if n%i==0:
        myList.append(i)

if sum(myList)==n:
    print("Yes")
else:
    print("No")

Matthias

建议使用的衬纸
print(('No', 'Yes')[sum(i for i in range(1, n) if not n % i) == n])

答案 1 :(得分:0)

answer

的评论部分有一个很酷的衬里

其他人已经指出了您的错误,因此这里是您可以对代码进行一些优化的方法。

6( =n)

除6之外的最大除数是3( = n//2),因为我们没有将数字本身加到factors_sum     在检查因子之和是否等于数字时(即在找到理想数时),因此我们不需要检查是否有大于3的数字     是6的因数。

# perfect nums example 6, 28, 496, and 8,128
n = 8128
stop = (n//2) +1 # stop is exclusive thats why extra 1    
factors_sum = 0

for i in range(1,stop):
    if n % i == 0:
        factors_sum += i

print('Yes' if factors_sum == n else 'No') # Yes

'''
benchmark result( using timeit ran each five times)
for smaller value of n there is no significant difference but as the value of n becomes very large you can clear see the difference.
n = 33550336
1)    stop = (n//2) +1
      6.580396663 ( time in secs)

2)    stop = n
      12.635774489000001 ( time in secs)
'''