TypeError:'str'对象不可调用Python 3.3

时间:2014-07-28 20:14:50

标签: python function

在这个程序中,我让用户输入一个等式并将其显示回来。

我遇到的问题是,当我再次调用要求方程的函数时,我得到一个TypeError。我知道为什么我一直收到这个错误,并尝试了多种方法来尝试修复它。帮助

import parser
def eq():   
    global eq
    global eq_parsed
    while True:
        eq = input('f(x) = ')
        try:
            eq_parsed = parser.expr(eq).compile()
            x=0
            eval(eq_parsed)
            break
        except:
            print("invalid equation")
    print ("Your equation: f(x)=", eq)
    mark=True
    return (mark)
T=True
mark=False
while T==True:
    if mark==False:
        n=input("\nStart? (y/n): ")
    elif mark==True:
        n=input("\nStart Again? (y/n): ")
#----------------------------------------
    if n=='y':
        mark = eq()
    elif n=='n':
        break
    else:
        print("Invalid Input*")

3 个答案:

答案 0 :(得分:4)

您的问题是您使用eq同时是函数名和全局变量。因此,当您编写eq()时,名称eq将引用全局变量。

def eq(): # eq refers to this function
    global eq 
    ....
    eq = input('f(x) = ') # now eq refers to the string object return by input
....
mark = eq() # and a string object is not callable

如果为函数和全局字符串变量使用不同的名称,您将使生活变得更轻松。另一种使事情变得更清晰的方法是停止使用global,并在函数的return语句中返回调用者需要的任何内容。

def eq():   
    while True:
        eq_input = input('f(x) = ')
        try:
            eq_parsed = parser.expr(eq).compile()
            x=0
            eval(eq_parsed)
            break
        except:
            print("invalid equation")
    print ("Your equation: f(x)=", eq_input)
    return True, eq_input, eq_parsed

然后像这样称呼它:

mark, eq_input, eq_parsed = eq()

目前您似乎没有使用分配给函数外部eq_inputeq_parsed的值。在这种情况下,您根本不需要返回它们,它们可以保持在函数的本地。

是惯用的
if val:

而不是

if val == True:

同样

if not val:

优先于

if val == False:

答案 1 :(得分:2)

您已将函数命名为eq(),并且还有一个名为eq的全局变量。你不能两者兼得。由于Python(通常)从上到下进行评估,因此首先将函数的名称分配给标识符eq,然后在input()调用的结果中进行评估。当您尝试在底部调用eq()时,您会收到错误,因为Python认为您正在尝试调用字符串。

也许命名变量equation,以避免混淆。

答案 2 :(得分:1)

def eq():   
     global eq
     # ...
     eq = input('f(x) = ')

在调用eq时将eq全局重新定义为输入内容,这是一个字符串。为函数和变量使用不同的名称。

因此,你可以只调用eq一次,然后它引用一个字符串而不再是一个函数。