【发布时间】:2019-03-07 17:18:20
【问题描述】:
我有一个读取 2 个整数 m 和 n 的代码,并打印 m 和 n(包括 m 和 n)之间的所有 perfect numbers。如果我输入 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)
【问题讨论】:
-
1.不要将名称
sum用于变量。它隐藏了内置的sum函数。 2.if sum == j: sum = j这个if的目的是什么?没有意义 -
把 j 存储在 sum 中,所以 print 函数可以移到 for 循环之外,避免被多次打印
-
@mkrieger1 一个完美的数字是它的适当除数之和,所以 1 作为除数包括在内,但数字本身不是。例如,6、28。
-
@YolandaHui 整个嵌套循环可以用一行替换,
print(sum(myList))(如果你不这样做sum = 0当然)
标签: python python-3.x