试图在python中构建一个复杂的计算器

时间:2014-10-13 09:38:55

标签: python

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'

请帮忙!我该如何解决?

6 个答案:

答案 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)