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

Python程序出现NameError:math未定义问题求助

解决Python中NameError: name 'math' is not defined的问题

这个错误的根源很清晰:你导入math模块的方式和调用函数的方式不匹配。

你代码开头写的是:

from math import sqrt

这种导入方式的作用是只把math模块里的sqrt函数单独导入到当前命名空间,所以你可以直接用sqrt()来调用,但不能用math.sqrt()——因为你根本没把整个math模块导入进来,Python自然找不到名为math的对象。

而你在f函数的return语句里偏偏用了math.sqrt(h(x)),这就触发了NameError。

两种解决方法任你选:

方法1:修改导入语句,导入整个math模块

把开头的导入改成:

import math

同时要把函数里所有直接用sqrt()的地方都改成math.sqrt(),比如f函数里的打印语句也要调整:

print( "f(x) call sqrt(h(x)) = ", math.sqrt(h(x)))

这种方式适合你后续可能需要用到math模块其他函数的场景。

方法2:保持现有导入,修正return语句的调用

继续用from math import sqrt,只需要把f函数的return行修改成和前面打印语句一致的调用方式:

return g(x) + sqrt(h(x))

这种方式更轻量,适合你只需要sqrt这一个函数的场景。

额外小提示

你的代码里还有几个不会执行的代码:比如g函数里return 4 * h(x)后面的print语句,h、k函数里return后面的注释内容(哪怕取消注释),因为return语句会直接终止函数执行,后面的代码永远不会被运行。如果需要打印调试信息,要把print放在return之前。

修改后的完整代码(用方法2的示例)

from math import sqrt
def f(x) :
    print("f(x) call g(x)= ", g(x))
    print( "f(x) call sqrt(h(x)) = ", sqrt(h(x)))
    print ()
    return g(x) + sqrt(h(x))  # 修正这里的调用
def g(x) :
    # 如果需要打印,把print放在return前面
    # print("g(x) call h(x)= ", h(x))
    return 4 * h(x)
def h(x) :
    # print("h(x) call k(x)= ", k(x))
    return x * x + k(x) - 1
def k(x) :
    # print("k(x) call, 2 * (x+1) = ", 2 * (x +1))
    return 2 * (x + 1)
x1 = f(2)
print("x1 = ",x1)
print ()
x2 = g(h(2))
print("x2 = ",x2)
print ()
x3 = k(g(2) + h(2))
print("x3 = ",x3)
print ()
x4 = f(0) + f(1) + f(2)
print("x4 = ",x4)
print ()
x5 = f(-1) + g(-1) + h(-1) + k(-1)
print("x5 = ",x5)
print ()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 21:02:34