使用 While 循环、For 循环和阶乘函数编写一个 Python 程序来查找强数,并附带示例。
Python 程序使用 While 循环查找强数
这个强数程序允许用户输入任何正整数。接下来,该程序使用 While 循环检查给定的数字是否是强数。
Number = int(input(" Please Enter any Number: "))
Sum = 0
Temp = Number
while(Temp > 0):
Factorial = 1
i = 1
Reminder = Temp % 10
while(i <= Reminder):
Factorial = Factorial * i
i = i + 1
print("\n Factorial of %d = %d" %(Reminder, Factorial))
Sum = Sum + Factorial
Temp = Temp // 10
print("\n Sum of Factorials of a Given %d = %d" %(Number, Sum))
if (Sum == Number):
print(" %d is a Strong Number" %Number)
else:
print(" %d is not" %Number)

在这个查找强数的 Python 程序示例中,首先,我们将原始值赋给 Temp 变量。这有助于我们保留原始值。
第一个 While 循环 确保给定的数字大于 0。while 循环内的语句拆分数字并查找给定数字中各个数字的阶乘。请参阅 Python 计算数字位数 文章以了解其逻辑。
第二个 While 循环(嵌套的)查找每个数字的阶乘。我建议您参考 Python 查找阶乘 文章以了解阶乘背后的逻辑。
用户输入的查找强数程序的数值 = 145,Sum = 0。
Factorial = 1, i = 1
Temp = Number
Temp = 145
第一个 While 循环 – 第一次迭代
Reminder = Temp % 10
Reminder = 145 % 10 = 5
现在,它进入 Python 内部或嵌套的 While 循环。这里,它计算 5 的阶乘 = 120。
Sum = Sum +120 => 0 + 120
Sum = 120
Temp = Temp //10 => 145 //10
Temp = 14
第二次迭代
Temp = 14 and Sum = 120
Reminder = 14 % 10 = 4
现在,它进入内部 While 循环。这里,强数程序计算 4 的阶乘 = 24。
Sum = 120 + 24
Sum = 144
Temp = 14 /10
Temp = 1
第三次迭代
Temp = 1 and Sum = 144
Reminder = 1 % 10 = 0
这里,1 的阶乘是 1
Sum = 144 + 1
Sum = 145
Temp = 1 / 10
Temp = 0
这里 Temp = 0,所以 while 循环条件失败。
if ( Number == Sum ) – 检查用户输入的数字是否等于 Sum。如果此条件为 True,则为强数。否则,不是。
Python 程序使用 For 循环查找强数
此强数程序与上面相同。在此 程序 中,我们将 While 循环替换为 For 循环。
Number = int(input(" Please Enter any Number: "))
Sum = 0
Temp = Number
while(Temp > 0):
Factorial = 1
Reminder = Temp % 10
for i in range(1, Reminder + 1):
Factorial = Factorial * i
print("Factorial of %d = %d" %(Reminder, Factorial))
Sum = Sum + Factorial
Temp = Temp // 10
print("\n Sum of Factorials %d = %d" %(Number, Sum))
if (Sum == Number):
print(" %d is a Strong Number" %Number)
else:
print(" %d is not" %Number)
Please Enter any Number: 40585
Factorial of 5 = 120
Factorial of 8 = 40320
Factorial of 5 = 120
Factorial of 0 = 1
Factorial of 4 = 24
Sum of Factorials 40585 = 40585
40585 is a Strong Number
Python 程序使用阶乘函数查找强数
此强数程序与第一个示例相同。但是,我们使用了一个内置的 math 函数 称为 factorial 来查找 factorial。这种方法消除了嵌套的 while 循环。
import math
Number = int(input(" Please Enter any Number: "))
Sum = 0
Temp = Number
while(Temp > 0):
Reminder = Temp % 10
Factorial = math.factorial(Reminder)
print("Factorial of %d = %d" %(Reminder, Factorial))
Sum = Sum + Factorial
Temp = Temp // 10
print("\n Sum of Factorials %d = %d" %(Number, Sum))
if (Sum == Number):
print(" %d is a Strong Number" %Number)
else:
print(" %d is not" %Number)
Please Enter any Number: 145
Factorial of 5 = 120
Factorial of 4 = 24
Factorial of 1 = 1
Sum of Factorials 145 = 145
145 is a Strong Number
使用列表推导式
此程序代码使用列表推导式和 math factorial 函数来检查和查找强数。
import math
def isStrongNumber(num):
digits = list(map(int, str(num)))
tot = sum(math.factorial(d) for d in digits)
return tot
num = int(input("Enter any Number: "))
if (num == isStrongNumber(num)):
print(num, " is a Strong Number.")
else:
print(num, " is not.")
Enter any Number: 145
145 is a Strong Number.
使用递归检查强数的程序
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
def isStrongNumber(num):
digits = list(map(int, str(num)))
tot = sum([factorial(i)for i in digits])
return tot
num = int(input("Enter any Number: "))
if (num == isStrongNumber(num)):
print(num, " is a Strong Number.")
else:
print(num, " is not.")
Enter any Number: 153
153 is not.
使用 lambda 和 reduce 函数
在此示例中,首先,我们必须从 functools 导入 reduce 函数并连接多个 lambda 语句。
from functools import reduce
def isStrongNumber(num):
digits = list(map(int, str(num)))
tot = reduce(lambda x, y: x + y, [reduce(lambda x, y:x * y, range(1, d + 1)) for d in digits])
return tot
num = int(input("Enter any Number: "))
if (num == isStrongNumber(num)):
print(num, " is a Strong Number.")
else:
print(num, " is not.")
Enter any Number: 225
225 is not.