题目要求:
编写函数计算任意位数的黑洞数。黑洞数是指这样的整数:由这个数字每位上的数字组成的最大数减去每位数字组成的最小数仍然得到这个数自身。例如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位数没有黑洞数!
在编程学习中,无论正反馈还是负反馈都是反馈,正视反馈,分析原因才能取得进步。负反馈是改进、进一步学习的好机会。