Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的Python代码显示错误的结果?_Python_Python 3.x - Fatal编程技术网

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

为什么我的Python代码显示错误的结果?,python,python-3.x,Python,Python 3.x,我有一个代码,读取2个整数,m和n,并打印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)):

我有一个代码,读取2个整数,m和n,并打印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)

你想做的事情是这样的

将一个数字的除数字本身之外的所有除数添加到一个列表中,然后检查该列表的总和是否等于该数字。如果相等,则打印数字,否则取下一个数字

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
输出

2
7
6

你让事情变得比需要的更复杂了。您需要一个嵌套循环来解决此问题。遍历范围内的每个数字,将值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)

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


1.不要对变量使用名称
sum
。它隐藏了内置的
sum
函数。2.
if sum==j:sum=j
if此
的目的是什么?它没有意义将j存储在sum中,因此打印功能可以移动到for循环之外,以避免打印多次times@mkrieger1一个完美数是它的适当除数之和,所以1被包含为除数,但数字本身不是。例如,6,28。@Yolandahu认为整个嵌套循环可以用一行替换,
print(sum(myList))
(当然,如果您不这样做的话)2和6不是完美数。27是输入。6是输出。很抱歉,我没有指出,6是完美数。不,它的除数是1+2+3==6。这会不会把所有的除数都加到所有数的列表中?是的,可以通过搜索成对的因子,并在平方根处停止,进一步优化。但是为什么要麻烦把它们保存到一个列表中呢?只要在找到它们的时候把它们加起来。让我检查一下哪种操作更便宜,是追加还是求和。即使你使用列表,你最终还是要做加法。加法本身相当快,当数字有数千位数时,创建新的Python整数对象的速度最终会变慢。但这不是问题。看看验证8589869056是否完美需要多长时间。)