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

