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
相关产品推荐
相关产品推荐

