0

我正在上一门 Python 入门课程,在一次练习中,我们将编写一个函数,在该函数中我们输入一个数字并返回 bool True 或 False,如果该数字是一个完美的数字。然后我们将创建另一个函数,它接受一个上限,并将检查每个数字直到该限制,如果它是一个完美的数字,则打印完美的数字。到目前为止,我的问题是这个 excersie 的第二部分,而不是打印出完美的数字,它会打印出“真”有多少。同样,第一个函数应该返回 True 或 False,所以我不确定我们如何让第二个函数打印出实际数字!

def perfect(num):
    x=1
    adding=0
    while x<num:
        if num % x == 0:
            adding=adding+x
        x=x+1

    if adding==num:
        #print(num)
        return (adding==num)
    else:
        return False

def perfectList(upperlimit):
    x=1
    while x<upperlimit:
        if perfect(x)==True:
            print(perfect(x))
        x=x+1
4

3 回答 3

0

您的第二个功能非常接近。

def perfectList(upperlimit):
    x=1
    while x < upperlimit:
        if perfect(x)==True:
            print(x) # changed from print(perfect(x))
        x=x+1

您只需要更改为print(x)(the number) not print(perfect(x)),它会返回该数字是否为完美数字。

于 2016-09-27T02:43:43.033 回答
0
def perfectn(x):
divisorlist = []
i=1
for i in range (1,x):
    if x % i == 0:
        divisorlist.append(i)
    i += i

print("The divisors of given number",x,"excluding itself are :", divisorlist)

sum=0
for i in range(0,len(divisorlist)):
    sum += divisorlist[i]
if sum == x:
    print("And it's a Perfect Number")
else:
    print("And it's not a perfect number")

    
perfectn(6)

输出:给定数字 6 的除数(不包括自身)是:[1, 2, 3]

这是一个完美的数字

perfectn(30)

输出:给定数字 30 的除数(不包括自身)是:[1, 2, 3, 5, 6, 10, 15]

这不是一个完美的数字

于 2021-06-15T04:40:17.680 回答
0

正如@DanielBetteridge 指出perfect()导致输出问题的冗余调用:

if perfect(x)==True:
    print(perfect(x))

这可以简单地完成为:

def perfectList(upperlimit):
    x = 1

    while x < upperlimit:
        if perfect(x):
            print(x)

        x += 1

这可能是由于您在以下位置重复您的平等测试模式而发生的perfect()

if adding==num:
        #print(num)
        return (adding==num)
    else:
        return False

这也是多余的,可以更简单地写成:

def perfect(number):
    total = 0

    x = 1

    while x < number:
        if number % x == 0:
            total += x
        x += 1

    return total == number

最后,请注意,这是寻找大完美数的错误方法,因为它会很快陷入困境。对于大数,一种更快的方法是使用 Lucas-Lehmer 检验来识别梅森素数,然后从素数中推导出伴完美数。

于 2021-06-16T22:41:35.063 回答