问题遇到的现象和发生背景
尝试用for循环在1000~9999内验证卡普雷卡尔黑洞问题时程序无终止(最终期望得到数值:6174)
问题相关代码
#Main exe
def main():
for n in range(1000,10000):
check(str(n))
if check(str(n)):
blackhole(str(n))
else:
print('Illegal')
#Check the number
def check(n):
if not n.isnumeric():
return False
elif len(n)!=4:
return False
elif n==n[0]*4:
return False
else:
return True
#Blackhole transform
def blackhole(n):
rom=n
while n!='6174':
a=list(n)
b=max_number(a)
c=min_number(a)
n=str(b-c) #The type of n is string instead of int
print('{} OK'.format(rom))
def max_number(a):
a.sort(reverse=True)
return int(''.join(a))
def min_number(a):
a.sort()
return int(''.join(a))
#Exe entrance
if __name__=='__main__':
main()
运行结果及报错内容
Traceback (most recent call last):
File "G:/程序/数字黑洞穷举验证.py", line 40, in
main()
File "G:/程序/数字黑洞穷举验证.py", line 6, in main
blackhole(str(n))
File "G:/程序/数字黑洞穷举验证.py", line 26, in blackhole
b=max_number(a)
KeyboardInterrupt
运行时一直没有print的任何显示,只好手动终止程序。
使用键盘手动终止程序时正在执行的位置也不同。
我的解答思路和尝试过的方法
怀疑过计算量较大,尝试过缩小验证范围(1000~1005),但没有用,好奇为什么。
我想要达到的结果
在1000~9999内验证卡普雷卡尔黑洞问题