Python 完全数列表器

Python 完全数列表器,python,math,Python,Math,我正试图得到一个程序,列出一定范围内的完美数字 minv= int(input('Give me a minimum value: ')) maxv= int(input('Give me a minimum value: ')) thesum = 0 perfectnums = [] for val in range(minr, maxr + 1): for n in range(1, val): if val % n == 0: thesu

我正试图得到一个程序,列出一定范围内的完美数字

minv= int(input('Give me a minimum value: '))
maxv= int(input('Give me a minimum value: '))
thesum = 0

perfectnums = []

for val in range(minr, maxr + 1):
    for n in range(1, val):
        if val % n == 0:
            thesum += n
            if thesum == val:
                perfectnums.append(val)

print(perfectnums)

当我将最小值设置为1,将最大值设置为10时,我预计会弹出6,请尝试在
for val…
循环中重置
thesum
。否则它只会成长。
(我还假设您的
minv
vs
minr
maxv
vs
maxr
只是一个打字错误。请确保它们是相同的。)

您永远不会将
thesum
重置为0。因此,它在数字之间进行传递。

对于每个val,您应该将SUM=0放入

minv= int(input('Give me a minimum value: '))
maxv= int(input('Give me a minimum value: '))
thesum = 0

perfectnums = []

for val in range(minr, maxr + 1):

    # here
    thesum = 0

    for n in range(1, val):
        if val % n == 0:
            thesum += n
            if thesum == val:
                perfectnums.append(val)

print(perfectnums)

在第一个for循环中应重置
thesum
变量。以下是工作代码:

minv= int(input('Give me a minimum value: '))

maxv= int(input('Give me a minimum value: '))

perfectnums = []

for val in range(minv, maxv + 1): # right variables minv and maxv
    thesum = 0 # declare the variable here

    for n in range(1, val):

        if val % n == 0:

            thesum += n

            if thesum == val:

                perfectnums.append(val)


print(perfectnums)

现在,对于
minv=1
maxv=10
,您将得到
[6]

把GaryO和Alex说的话放在一起,在问题中修正文本:

minv= int(input('Give me a minimum value: '))
maxv= int(input('Give me a maximum value: '))

perfectnums = []

for val in range(minv, maxv + 1):
    thesum = 0
    for n in range(1, val):
        if val % n == 0:
            thesum += n
            if thesum == val:
                perfectnums.append(val)

print(perfectnums)

您忘记将SUM重置为
0

minv= int(input('Give me a minimum value: '))
maxv= int(input('Give me a maximum value: '))
thesum = 0

perfectnums = []

for val in range(minv, maxv + 1):
    for n in range(1, val):
        if val % n == 0:
            thesum += n
    if thesum == val:
        perfectnums.append(val)
    thesum = 0

一个完全数等于它的除数之和。您必须处理所有除数,然后测试它们的和是否等于该值。
sum==val
测试必须在循环迭代可能的除数之后进行。对于您探测的每个
val
,必须将
和初始化为零;必须将
thesum=0
移动到外部循环中。显然,您还复制并粘贴了输入行。看看你的第二个输入提示!