如何使用 For 循环、While 循环和函数编写 Python 程序来判断是否为完数。如果一个数的所有正因子(不包括它本身)之和等于该数,那么这个数就是完数。
例如,6 是 Python 中的一个完数,因为 6 可以被 1、2、3 和 6 整除。所以,这些值的和是 1+2+3 = 6(请记住,我们必须排除它本身。这就是为什么我们没有在此处加上 6)。一些完数是 6、28、496、8128、33550336 等等。
Python 程序使用 For 循环判断是否为完数
此 Python 程序允许用户输入任何数字。使用该数字,它将使用 For 循环计算给定的整数值是否为完数。
# find Perfect Number using For loop
Number = int(input(" Please Enter any Number: "))
Sum = 0
for i in range(1, Number):
if(Number % i == 0):
Sum = Sum + i
if (Sum == Number):
print(" %d is a Perfect Number" %Number)
else:
print(" %d is not a Perfect Number" %Number)
在此 Python 完数程序中,以下语句将提示用户输入任何数字,并将用户输入的值存储在 Number 变量中。
Number = int(input(" Please Enter any Number: "))
下一行,我们声明了整数变量 Sum = 0。接下来,我们使用了带 range() 的 for 循环,这里我们不解释 for 循环。如果你不理解 for 循环,请访问我们的文章 Python For 循环。
for i in range(1, Number):
在 For 循环内部,我们放置了 Python If 语句来测试条件。
if(Number % i == 0):
Sum = Sum + i
For 循环内的 If 语句将检查 Number 是否可以被 i 整除。如果数字可以被 i 整除,那么 i 的值将被加到 Sum 中。请参考 If 语句 文章来理解 Python 中的 If 语句。

从上面的完数示例中,用户输入的数字是:Number = 6
第一次迭代:对于第一次迭代,Number = 6,Sum = 0,i = 1
If (Number % i == 0)
6 % 1 == 0
If 语句在此处成功,所以:
Sum = Sum + i
Sum = 0 +1 = 1
第二次迭代:对于第二次迭代,Sum 和 i 的值已更改为:Sum = 1,i = 2
If (Number % i == 0)
6 % 2 == 0
If 语句在此处成功,所以:
Sum = Sum + i
Sum = 1 + 2 = 3
第三次迭代:对于此 Python 完数程序的第三次迭代,Sum 和 i 的值已更改为 Sum = 3,i = 3。
If (Number % i == 0)
6 % 3 == 0
If 语句在此处成功,所以:
Sum = Sum + i
Sum = 3 + 3 = 6
对于第四次和第五次迭代,if 条件内的条件将失败。
6 % 4 == 0 (假)
6 % 5 == 0 (假)
因此,编译器将终止 for 循环。
在下一行,我们有一个 If 语句来检查 Sum 变量中的值是否恰好等于给定的 Number。
如果条件 (Sum == Number) 为 TRUE,则将执行下面的 print 语句。
print(" %d is a Perfect Number" %Number)
如果条件 (Sum == Number) 为 FALSE,则将执行下面的 print 语句。
print(" %d is not a Perfect Number" %Number)
对于此示例 (Sum == Number) 为 True。因此,给定的 Number 是完数。
Python 程序使用 While 循环判断是否为完数
此 Python 程序允许用户输入任何数字。使用该数字,它将使用 While 循环计算用户输入是否为完数。
# find Perfect Number using While loop
Number = int(input(" Please Enter any Number: "))
i = 1
Sum = 0
while(i < Number):
if(Number % i == 0):
Sum = Sum + i
i = i + 1
if (Sum == Number):
print(" %d is a Perfect Number" %Number)
else:
print(" %d is not the Perfect Number" %Number)
在此示例中,我们没有做任何特别的事情。我们只是用 While 循环替换了上面 Python 程序 中的 For 循环,如果您发现理解 While 循环功能有困难,请参考 Python While 循环 文章。
Please Enter any Number: 496
496 is a Perfect Number
>>>
Please Enter any Number: 525
525 is not the Perfect Number
Python 程序使用函数判断是否为完数
此完数程序允许用户输入任何数字。使用该数字,它将使用函数计算该数字是否为完数。
def Perfect_Number(Number):
Sum = 0
for i in range(1, Number):
if(Number % i == 0):
Sum = Sum + i
return Sum
# Taking input from the user
Number = int(input("Please Enter any number: "))
if (Number == Perfect_Number(Number)):
print("\n %d is a Perfect Number" %Number)
else:
print("\n %d is not a Perfect Number" %Number)
如果您观察到上面的代码,在此示例中我们没有做任何特别的事情。我们只是定义了一个新的用户定义函数,并将我们在 For 循环示例中提到的代码添加了进去。
Please Enter any number: 33550336
33550336 is a Perfect Number
>>>
Please Enter any number: 54
54 is not a Perfect Number
在此示例中,我们使用 for 循环和 if 语句来迭代和查找因子。接下来,我们将这些因子分配给一个列表,并使用列表的 sum() 方法来查找总和。
def isPerfectNumber(n):
divisors = []
for i in range(1, n):
if n % i == 0:
divisors.append(i)
if n == sum(divisors):
return True
else:
return False
num = int(input("Enter any Value = "))
if isPerfectNumber(num):
print(num," is a Perfect Number.")
else:
print(num, " is Not.")
Enter any Value = 28
28 is a Perfect Number.
使用列表推导式查找完数的程序
def isPerfectNumber(n):
divisors = [i for i in range(1, n) if n % i == 0]
return sum(divisors)
num = int(input("Enter any Value = "))
if num == isPerfectNumber(num):
print(num," is a Perfect Number.")
else:
print(num, " is Not.")
Enter any Value = 225
225 is Not.
我们也可以编写上面的程序
def isPerfectNumber(n):
divisors = sum([i for i in range(1, n) if n % i == 0])
return n == divisors
num = int(input("Enter any Value = "))
if isPerfectNumber(num):
print(num," is a Perfect Number.")
else:
print(num, " is Not.")
Enter any Value = 496
496 is a Perfect Number.
Python 程序查找 1 到 1000 之间的完数
此程序允许用户输入最小值和最大值。接下来,此程序将查找最小值和最大值之间的完数。
# Perfect Number between 1 to 1000
# Taking input from the user
Minimum = int(input("Please Enter any Minimum Value: "))
Maximum = int(input("Please Enter any Maximum Value: "))
for Number in range(Minimum, Maximum - 1):
Sum = 0
for n in range(1, Number - 1):
if(Number % n == 0):
Sum = Sum + n
# display the result
if(Sum == Number):
print(" %d " %Number)
输出
Please Enter any Minimum Value: 1
Please Enter any Maximum Value: 100
6
28
>>>
Please Enter any Minimum Value: 1
Please Enter any Maximum Value: 1000
6
28
496
在此完数程序中,此 For 循环帮助编译器在最小值和最大值变量之间进行迭代,迭代从最小值开始,然后不会超过最大值变量。
for Number in range(Minimum, Maximum):
在 for 循环内部,我们正在检查该数字是否为完数。我们已经在第一个示例中解释了 for 循环的迭代。
使用列表推导式打印 1 到 1000 之间的完数
def isPerfectNumber(n):
divisors = [i for i in range(1, n) if n % i == 0]
return n == sum(divisors)
for i in range(1, 1001):
if isPerfectNumber(i):
print(i, end= ' ')
6 28 496