def calc():
import math
num=float(raw_input("Enter a number"))
func=raw_input("Enter a function")
result=math.func(num)
return result
a=calc()
print a
我得到一个数字(num)和数学函数的名称(func),(如:log,sqrt,sin,cos等等) 我需要在数字上返回使用此函数的结果。
这是我得到的错误:
Traceback (most recent call last):
File "C:/Users/user/Desktop/try of 3", line 11, in <module>
a=calc()
File "C:/Users/user/Desktop/try of 3", line 8, in calc
result=math.func(num)
AttributeError: 'module' object has no attribute 'func'
请帮忙!我该如何解决?
答案 0 :(得分:3)
math.func
表示&#34;从对象"func"
获取名为math
的属性(没有它)。如果您想通过动态计算的名称获取属性,请使用getattr
:
result = getattr(math, func)(num)
或者,更安全:
func = getattr(math, funcname, None)
if func:
return func(arg)
else:
... # unknown function, report error
我还考虑保留功能的自定义词典:
all_funcs = {'sin': math.sin,
'cos': math.cos,
'hex': hex}
...
func = all_funcs.get(funcname, None)
if func:
return func(arg)
else:
... # unknown function, report error
通过这种方式,您可以更轻松地将功能扩展到标准math
所提供的范围之外。
答案 1 :(得分:1)
问题是当你这样做时:
result = math.func(...)
您没有使用变量func
,而是指名称math.func
,它显然不存在。要做你想做的事(我认为),你必须通过它的名字来查找这个功能:
actual_func = getattr(math, func)
result = actual_func(num)
答案 2 :(得分:1)
您应该使用getattr
。
# place your import outside def
import math
def calc():
num=float(raw_input("Enter a number"))
func=raw_input("Enter a function")
funcToCall = getattr(math, func)
result=funcToCall(num)
return result
a=calc()
print a
答案 3 :(得分:0)
这也有效。对于要呼叫的每个功能,请使用如下所示的if
/ elif
语句。例如,我只为sqrt()
撰写。对其他函数执行相同操作并在elif
语句中写入。
def calc():
import math
num=float(raw_input("Enter a number"))
func=raw_input("Enter a function")
if func.lower() == "sqrt":
result=math.sqrt(num)
return result
a=calc()
print a
答案 4 :(得分:-1)
import math
def calc():
num=float(raw_input("Enter a number"))
func=raw_input("Enter a function")
math_function = getattr(math, func, None)
if not math_function:
raise RuntimeError('Math func not found')
return math_function(num)
print calc()
答案 5 :(得分:-2)
数学模块中没有名为func
的函数。
我想你想这样做,但我不确定。
return (num, func)