Python较高难度考试问题

求得100-999内的水仙花数和。水仙花数定义:一个三位数的各个位数的三次方和等于这个数本身,列如153,111+555+333=153.
要求如下:
(1)函数isPpdi(n):判断一个数是否是水仙花数,入参为一个三位数,返回值为True/False,True代表的是水仙花数,False代表的不是水仙花数。
(2)函数getSum(a,b):用于求区间[a,b]内所有的水仙花数,并求取/
(3)main函数:,用input输入100和999,调用getSum函数求取100-999之间所有水仙花数之和,并输出。

稍等

img

def isPpdi(n):
    if n == sum([int(i)**3 for i in str(n)]):
        return True
    else:
        return False

def getSum(a, b):
    res = []
    for i in range(a, b+1):
        if isPpdi(i):
            res.append(i)
    return sum(res)

if __name__ == '__main__':
    a = int(input("输入数字a:"))
    b = int(input("输入数字b:"))
    print("{}到{}之间的水仙花数之和为{}".format(a, b, getSum(a, b)))


该回答引用chatgpt:这样更好一点,不符合给出提示

img


def isPpdi(n):
    # 判断一个数是否是水仙花数
    # 入参为一个三位数,返回值为True/False
    if n < 100 or n > 999:
        return False
    digits = [int(d) for d in str(n)]
    sum_of_cubes = sum([d**3 for d in digits])
    return sum_of_cubes == n

def getSum(a, b):
    # 求区间[a, b]内所有的水仙花数,并求和
    narcissistic_nums = []
    for num in range(a, b + 1):
        if isPpdi(num):
            narcissistic_nums.append(num)
    return sum(narcissistic_nums)

if __name__ == '__main__':
    start = int(input("请输入区间起始值:"))
    end = int(input("请输入区间结束值:"))

    if start < 100 or start > 999 or end < 100 or end > 999 or start > end:
        print("输入的起始值和结束值不符合要求,请重新输入。")
    else:
        sum_of_narcissistic_nums = getSum(start, end)
        print(f"区间[{start}, {end}]内的水仙花数之和为:{sum_of_narcissistic_nums}")

以下是Python的实现代码:

def isPpdi(n):
    s = str(n)
    sum = 0
    for i in range(len(s)):
        sum += int(s[i]) ** 3
    return sum == n

def getSum(a,b):
    sum = 0
    for i in range(a, b+1):
        if isPpdi(i):
            sum += i
    return sum

if __name__ == '__main__':
    a,b = map(int, input().split())
    print(getSum(a,b))

函数 isPpdi 用于判断一个三位数是否是水仙花数,实现方式为将其每一位上的数字的三次方进行求和,并判断是否等于该数本身。

函数 getSum 用于求区间 $[a, b]$ 内所有的水仙花数,采用循环遍历法,遍历范围为 $[a, b]$,对于每个数,调用 isPpdi 进行判断,如果为 True,则将其加入求和结果中,最后返回求和结果。

main 函数中,通过输入获取区间的上下限,并调用 getSum 函数计算 $100-999$ 内所有水仙花数的和,并输出结果。