Py学习  »  Python

为什么我的python代码显示了错误的结果?

Yolanda Hui • 7 年前 • 1640 次点击  

我有一个代码,它读取2个整数m和n,并打印所有 perfect numbers m和n之间(包括m和n)。如果我输入2和7,它应该给我6。但它给了我13。怎么了?

m=int(input())
n=int(input())

myList=[]

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

sum=0
for i in range(0,len(myList)):
    sum=sum+myList[i]
    for j in range(m,n+1):
        if sum==j:
            sum=j

print(sum)
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/30396
文章 [ 4 ]  |  最新文章 7 年前
GraphicalDot
Reply   •   1 楼
GraphicalDot    7 年前

您应该迭代到n/2,因为任何“数字”都不能被任何大于“数字”一半的数字整除。

for i in range(m, n+1):
    _sum = 0
    for j in range(1, int(i/2)+1):
        if i%j==0:
            _sum += j
    if _sum==i:
       print(i)
Albin Paul
Reply   •   2 楼
Albin Paul    7 年前

你想做的就是这样。

将一个数的所有除数加在一个列表中,然后检查这个列表的和是否等于这个数。如果相等,请打印号码,否则取下一个号码

m=int(input())
n=int(input())


for i in range(m,n+1):

    myList=[]
    for j in range(1,i):
        if i%j==0:
            myList.append(j)
    if sum(myList)==i:
        print(i)

输入

2
7

产量

6
Shane Tyler Malachow
Reply   •   3 楼
Shane Tyler Malachow    7 年前

你让事情变得比需要的更复杂。您需要一个嵌套循环来解决这个问题。循环遍历范围内的每个数字,将值x设置为0,每次找到一个等分的数字时,将其添加到x中。如果在内部循环的末尾,x==i,则会得到一个完美的数字并将其打印出来。如果你需要它在一个列表中,把它附加到你的列表中。您试图保存所有中间数,如果找到结果,就保存它。

for i in range(m,n+1):
    x = 0
    for j in range(1,i):
        if i % j == 0:
            x += j
    if i == x:
        print(i)
Tanmay jain
Reply   •   4 楼
Tanmay jain    7 年前
m=int(input())
n=int(input())

'''
mylist =[]  instead of using myList to keep track of factors 
just use sum_of_factors_of_i variable and keep adding newly found factors to 
it by doing so you will not need to loop over myList to get sum.
'''
for i in range(m,n+1):
    sum_of_factors_of_i = 0
    for j in range(1,i):
        if i%j==0:
            sum_of_factors_of_i += j

    if sum_of_factors_of_i == i:
        print(i)

'''        
input 
2
7

output
6
----------------------------------
input
2
30

output
6
28
'''