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

2024-10-05 22:46:57 发布

您现在位置:Python中文网/ 问答频道 /正文

  1. 程序要求用户输入一个数字N

  2. 该程序应该显示0-em>N范围内的所有“超级数字”。在

    Super number: is a number such that the sum of the factorials of its digits equals the number.

    示例:

    • 12个!=1!+2个!=1+2=3(不是超级)
    • 145=1!+4个!+5个!=1+24+120(超级)
  3. 当程序显示0-em>N范围内的所有数字都是“超级数字”时,我似乎陷入了困境。我已经得出结论,我需要一个循环来解决这个问题,但我不知道如何去做。所以,举例来说,程序应该读取0-50之间的所有数字,只要数字是超级的,它就会显示出来。所以它只显示1和2,因为它们被认为是超级的

    enter integer: 50
    2 is super
    1 is super
    
  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") 
    

Tags: the程序numberreturnifis数字result
3条回答

现有的答案已经说明了如何完成最后一个循环,将函数连接在一起。或者,您也可以使用更多的内置函数和库,比如sum,或者{},为了得到数字,您可以迭代数字的字符串表示形式中的字符。在

这样,问题可以在一行代码中解决(不过最好将is super check移到单独的函数中)。在

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]

首先,我将稍微改变主代码的执行方式,将主要部分移动到if __name__ == '__main__',它将在运行.py作为主文件后执行:

if __name__ == '__main__':
    number = int(input ("enter integer: "))
    if (breakdown(number)) == number:
        print(str(number)+ " is super")

在这之后,你应该做些什么来循环数字看起来就更清楚了,所以不是上面提到的,而是:

^{pr2}$

输入和输出示例:

enter integer: 500
1 is super
2 is super
145 is super

小建议-您不需要在print()-int中调用str()将以相同的方式显示。在

很长一段时间以来,我没有做太多的Python,但我尝试了自己的尝试来解决这个问题,我认为这个问题更具可读性。就其价值而言,我假设当你说“显示0-N范围内的所有数字”时,这是一个排他的上界,但是如果我错了,很容易使它成为一个包容的上界。在

import math


def digits(n):
    return (int(d) for d in str(n))


def is_super(n):
    return sum(math.factorial(d) for d in digits(n)) == n


def supers_in_range(n):
    return (x for x in range(n) if is_super(x))


print(list(supers_in_range(150))) # [1, 2, 145]

相关问题 更多 >