丙烯酸 2022-01-29 15:02 采纳率: 66.7%
浏览 53
已结题

用python验证卡普雷卡尔黑洞问题时运行不正常

问题遇到的现象和发生背景

尝试用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内验证卡普雷卡尔黑洞问题

  • 写回答

2条回答 默认 最新

  • A Python 萌新花花 2022-01-30 15:00
    关注

    你这个while 的判断条件不应该是n!=6174,应该是别的,不然你的while循环就没有跳出了,当你的值是1000的时候就会卡在里面

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月9日
  • 已采纳回答 2月1日
  • 创建了问题 1月29日

悬赏问题

  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事: