【初学者】用python找n位黑洞数(基础知识,简单方法)

题目要求:

编写函数计算任意位数的黑洞数。黑洞数是指这样的整数:由这个数字每位上的数字组成的最大数减去每位数字组成的最小数仍然得到这个数自身。例如3位黑洞数是495,因为954-459=495,4位数字是6174,因为7641-1467=6174。

# 定义函数 计算黑洞数
def jshds(n):
    for i in range(10 ** (n - 1), 10 ** n):
        a = str(i)
        list1 = []
        for x in a:
            list1.append(x)

        list1.sort()  # 升序排列
        # 这里一定要copy,不能直接list_min = list1
        # list_min = list1,只是将list_min指向list1的内存地址,因此对list_min或list1的更改都会影响到原始列表。
        list_min = list1.copy()

        # 去除首位为0的元素
        while list_min[0] == '0':
            del list_min[0]

        list1.sort(reverse=True)  # 降序排列
        list_max = list1.copy()  # 同理,一定要是深复制!!
        # 列表-->字符串-->整数
        num_min = eval(''.join(list_min))
        num_max = eval(''.join(list_max))

        res = num_max - num_min
        if res == i:
            print(f"{n}位数的黑洞数是{i}")


n = eval(input("需要计算几位数的黑洞数:"))
jshds(n)

        我一开始仅是使用浅复制,list_min=list1,没有得到想要的结果,认真思考,发现是复制的时候出了问题;

        改正后,我试着传入参数3、4、5运行代码,传入参数3、4时代码运行结果正确,很喜悦,但当传入参数5时,发现代码运行没有结果,我不知道是哪里出错了,回头检查代码也不能发现哪里有问题,一开始我很沮丧,后来我暂时放下这种挫败的心情,重新审视代码,发现我的代码没有问题,原来5位数没有黑洞数!

        在编程学习中,无论正反馈还是负反馈都是反馈,正视反馈,分析原因才能取得进步。负反馈是改进、进一步学习的好机会。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值