如何显示0-N范围内"超级数字"的所有数字

Ang*_*ela 10 python python-3.x

  1. 该方案要求一个数字用户Ñ.

  2. 该程序应该显示0- N范围内的所有数字,即"超级数字".

    超级数:是一个数字,使得其数字的阶乘的总和等于数字.

    例子:

    • 12!= 1!+ 2!= 1 + 2 = 3(不是超级)
    • 145 = 1!+ 4!+ 5!= 1 + 24 + 120(超级)
  3. 我似乎坚持的部分是程序显示0- N范围内的所有数字,即"超级数字".我已经得出结论,我需要一个循环才能解决这个问题,但我不知道如何解决这个问题.因此,例如,程序应该读取0-50中的所有数字,并且只要数字是超级,它就会显示它.所以它只显示1和2,因为它们被认为是超级的

    enter integer: 50
    2 is super
    1 is super
    
    Run Code Online (Sandbox Code Playgroud)
  4. 我写了两个函数; 第一个是常规因子程序,第二个是对数字的阶乘进行求和的程序:

    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)

tob*_*s_k 8

现有答案已经显示了如何进行最终循环以将功能联系在一起.或者,您也可以使用更多的内置函数和库,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)


Sha*_*han 4

首先,我将稍微改变主要代码的执行方式,将主要部分移动到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都会以相同的方式显示。

  • 是的,了解 `if __name__ == '__main__':` 是件好事。但是,如果您可以将主代码放入“main”函数中,并在“if __name__ == '__main__”块中调用“main()”,而不是仅仅将代码转储到全局上下文中,那就更好了。当然,对于小型脚本和示例代码,将代码放入全局空间中没有任何问题,但如果将代码包装在函数中并最大限度地减少全局空间中的实时代码量,这肯定会更整洁(而且通常更有效),这应该主要由类和函数定义组成。 (2认同)