为什么我的Python代码显示错误的结果?
我有一个代码,读取2个整数,m和n,并打印m和n之间的所有值(包括m和n)。如果我输入2和7,它应该给我6。但它给了我13分。出了什么问题为什么我的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)):
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是否完美需要多长时间。)