Ang*_*ela 10 python python-3.x
该方案要求一个数字用户Ñ.
该程序应该显示0- N范围内的所有数字,即"超级数字".
超级数:是一个数字,使得其数字的阶乘的总和等于数字.
我似乎坚持的部分是程序显示0- N范围内的所有数字,即"超级数字".我已经得出结论,我需要一个循环才能解决这个问题,但我不知道如何解决这个问题.因此,例如,程序应该读取0-50中的所有数字,并且只要数字是超级,它就会显示它.所以它只显示1和2,因为它们被认为是超级的
enter integer: 50
2 is super
1 is super
Run Code Online (Sandbox Code Playgroud)我写了两个函数; 第一个是常规因子程序,第二个是对数字的阶乘进行求和的程序:
number = int(input ("enter integer: "))
def factorial (n):
result = 1
i = n * (n-1)
while n >= 1:
result = result * n
n = n-1
return result
#print(factorial(number))
def breakdown (n):
breakdown_num = 0
remainder = 0
if n < 10:
breakdown_num += factorial(n)
return breakdown_num
else:
while n > 10:
digit = n % 10
remainder = n // 10
breakdown_num += factorial(digit)
#print (str(digit))
#print(str(breakdown_num))
n = remainder
if n < 10 :
#print (str(remainder))
breakdown_num += factorial(remainder)
#print (str(breakdown_num))
return breakdown_num
#print(breakdown(number))
if (breakdown(number)) == number:
print(str(number)+ " is super")
Run Code Online (Sandbox Code Playgroud)现有答案已经显示了如何进行最终循环以将功能联系在一起.或者,您也可以使用更多的内置函数和库,sum或者math.factorial,为了获得数字,您可以只迭代数字的字符串表示中的字符.
这样,问题可以在一行代码中解决(尽管将is-super检查移动到单独的函数可能更好).
def issuper(n):
return sum(math.factorial(int(d)) for d in str(n)) == n
N = 1000
res = [n for n in range(1, N+1) if issuper(n)]
# [1, 2, 145]
Run Code Online (Sandbox Code Playgroud)
首先,我将稍微改变主要代码的执行方式,将主要部分移动到if __name__ == '__main__',它将在.py作为主文件运行后执行:
if __name__ == '__main__':
number = int(input ("enter integer: "))
if (breakdown(number)) == number:
print(str(number)+ " is super")
Run Code Online (Sandbox Code Playgroud)
之后,您应该如何循环数字似乎更清楚了,因此而不是上面的内容:
if __name__ == '__main__':
number = int(input ("enter integer: "))
for i in range(number+1):
if (breakdown(i)) == i:
print(str(i)+ " is super")
Run Code Online (Sandbox Code Playgroud)
输入和输出示例:
enter integer: 500
1 is super
2 is super
145 is super
Run Code Online (Sandbox Code Playgroud)
小建议 - 您不需要打电话str()-print()无论如何int都会以相同的方式显示。
| 归档时间: |
|
| 查看次数: |
809 次 |
| 最近记录: |