You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jupyter Notebook中嵌套的check_prime函数无法运行及报错问题咨询

问题排查与修复

1. 输入数字后无响应的原因

你在if number.isnumeric()分支里定义了check_prime函数,但写完函数后完全没调用它——函数定义完不会自动执行,必须显式调用才会运行判断逻辑,所以程序只会卡在那里,没任何输出。

2. 非数字输入报错的原因

check_prime是定义在if分支内部的函数,只有输入数字时这个函数才会被定义。当输入非数字时,程序进入else分支,此时check_prime根本不存在,要是你在else里(哪怕没写完代码)不小心写了调用它的语句,就会触发UnboundLocalError。而且你的else分支是空的,逻辑不完整。

3. 额外问题:check_prime自身逻辑完全错误

就算调用了这个函数,它也没法正确判断质数:

  • divisor初始为1,加1后变成2,只做了一次判断,没有循环遍历所有可能的除数
  • 比如输入9,程序会因为9%2≠0直接判定为质数,但9明显能被3整除,不是质数

修复后的完整代码

def input_number():
    number = input("请输入一个数字: ")
    if number.isnumeric():
        the_number = int(number)
        
        def check_prime(n):
            if n <= 1:
                print(f"{n} not a prime number")
                return
            # 遍历到平方根即可,优化判断效率
            for divisor in range(2, int(n**0.5) + 1):
                if n % divisor == 0:
                    print(f"{n} not a prime number")
                    print(f"{n} divide {n//divisor} is {divisor}")
                    return
            print(f"{n} is a prime number")
        
        # 必须显式调用函数才会执行
        check_prime(the_number)
    else:
        print("输入内容不是有效数字,请重新输入")

修复要点

  • 给check_prime加参数,避免依赖外部变量,逻辑更独立
  • 实现正确的质数判断逻辑:遍历到数字的平方根,只要有一个除数能整除就判定非质数
  • 显式调用check_prime函数
  • 完善非数字输入的错误提示,避免变量未定义问题

内容的提问来源于stack exchange,提问作者najma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 17:10:36