偶尔看到一个关于数字黑洞的东西,正好可以练习迭代和函数的使用,所以编写里一个小程序,显示4位数字的数字黑洞(4位数的数字黑洞是6174)
摘自百度:
黑洞数又称陷阱数,类具有奇特转换特性整数 任何数字全相同整数,经有限重排求差操作,总会得某或些数,这些数即黑洞数重排求差操作即把组成该数数字重排得大数减去重排得小数
黑洞原是天文学中的概念,表示这样一种天体:它的引力场是如此之强,就连光也不能逃脱出来。数学中借用这个词,指的是某种运算,这种运算一般限定从某些整数出发,反复迭代后结果必然落入一个点或若干点的情况叫数字黑洞。
后面还可以编写其他的数字黑洞
#! encoding ='utf-8'
# 使用函数的形式进行递归
def math_hole():
# c作为全局变量,不仅要从外面输入,而且返回值还要进行引用计算
global c
# 把a空串放到函数里的好处事,a轮询一次就清空重置一次,不然使用里append会使这个列表无限增加
a = []
for value in c:
a.append(value)
# 对a列表进行升序排列,得到一个新列表
a.sort()
# 引号里面是连接的符号,比如'*'.join,a*b,join是列表变成字符串的拼接方式
m = int(''.join(a))
# 对a列表进行降序排序得到一个新列表,从这步可以看出其中真正的a是没有变化的,只不过使用sort函数后展示有所不同
a.sort(reverse=True)
n = int(''.join(a))
# 打印两个数相减等于另一个数的情况,这个要熟记!!输出的时候逗号是变空格
print(n,'-',m,'=',n-m)
# 把C变成字符串才能进行for查询
# 下面的程序是避免计算中出现里c为3位数的情况,如果少于3位补0
t =len(str(n-m))
if t == 4:
c = str(n - m)
else:
c = str(n - m) + '0' * (4 - t)
# 返回参数作为轮询调用
return (n,m,c)
c = input('请输入4个不全相同的数')
while True:
math_hole()
if c == '6174':
# 再显示一次表示开始出现重复的形式里
math_hole()
break
运行后的代码:
C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe D:/python_work/math_block_hole.py
请输入4个不全相同的数5621
6521 - 1256 = 5265
6552 - 2556 = 3996
9963 - 3699 = 6264
6642 - 2466 = 4176
7641 - 1467 = 6174
7641 - 1467 = 6174
Process finished with exit code 0