完美数字程序 python
Perfect numbers program python
我正在参加 python 的入门课程,在一个练习中,我们将编写一个函数,在其中输入一个数字,然后 return bool True 或 False,如果数字是一个完美的数字。然后我们要创建另一个函数,它接受一个上限,并检查每个数字直到这个限制,如果它是一个完美的数字,打印完美的数字。到目前为止,我的问题是这个练习的第二部分,而不是打印出完美的数字,它会打印出有多少 "True"。同样,第一个函数支持 return 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
你的第二个函数很接近
def perfectList(upperlimit):
x=1
while x < upperlimit:
if perfect(x)==True:
print(x) # changed from print(perfect(x))
x=x+1
你只需要更改为 print(x)
(数字)而不是 print(perfect(x))
,这 returns 这个数字是否是一个完美的数字。
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]
这不是一个完美的数字
正如@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 检验来识别 Mersenne 素数,然后从素数中推导出伴随完美数。
我正在参加 python 的入门课程,在一个练习中,我们将编写一个函数,在其中输入一个数字,然后 return bool True 或 False,如果数字是一个完美的数字。然后我们要创建另一个函数,它接受一个上限,并检查每个数字直到这个限制,如果它是一个完美的数字,打印完美的数字。到目前为止,我的问题是这个练习的第二部分,而不是打印出完美的数字,它会打印出有多少 "True"。同样,第一个函数支持 return 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
你的第二个函数很接近
def perfectList(upperlimit):
x=1
while x < upperlimit:
if perfect(x)==True:
print(x) # changed from print(perfect(x))
x=x+1
你只需要更改为 print(x)
(数字)而不是 print(perfect(x))
,这 returns 这个数字是否是一个完美的数字。
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]
这不是一个完美的数字
正如@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 检验来识别 Mersenne 素数,然后从素数中推导出伴随完美数。