社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Yolanda Hui • 7 年前 • 1764 次点击  

我有一个代码,它读取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
'''