Python 类型错误:';int';对象不可调用:二次

Python 类型错误:';int';对象不可调用:二次,python,error-handling,python-2.7,quadratic,Python,Error Handling,Python 2.7,Quadratic,(在二次方程中查找x的值,不需要导入。)每当我运行程序时,Python都会在discriminant=(b**2)-4(a*c)处停止,并显示TypeError:“int”对象不可调用。怎么了 #------SquareRootDefinition---------# def Square_Root(n, x): if n > 0: y = (x + n/x) / 2 while x != y: x = y return Square_Roo

(在二次方程中查找x的值,不需要导入。)每当我运行程序时,Python都会在
discriminant=(b**2)-4(a*c)
处停止,并显示TypeError:“int”对象不可调用。怎么了

#------SquareRootDefinition---------#
def Square_Root(n, x):
if n > 0:
    y = (x + n/x) / 2
    while x != y:
        x = y
        return Square_Root(n, x)
    else:
        if abs(10 ** -7) > abs(n - x ** 2):
            return y
elif n == 0:
    return 0
else:
    return str(int(-n)) + "i"

#----------Quadratic Equation--------------#

a = input("Enter coefficient a: ")
while a == 0:
    print "a must not be equal to 0."
    a = input("Enter coefficient a: ")
b = input("Enter coefficient b: ")
c = input("Enter coefficient c: ")

def Quadratic(a, b, c):
    discriminant = (b ** 2) - 4(a * c)
    if discriminant < 0:
        print "imaginary"
    elif discriminant >= 0:
        Sqrt_Disc = Square_Root(discriminant)
        First_Root = (-b + Sqrt_Disc) / (2 * a)
        Second_Root = (-b - Sqrt_Disc) / (2 * a)

  return First_Root, Second_Root

X_1, X_2 = Quadratic(a, b, c)
#----SquareRootDefinition---------#
def平方根(n,x):
如果n>0:
y=(x+n/x)/2
而x!=y:
x=y
返回平方根(n,x)
其他:
如果abs(10**-7)>abs(n-x**2):
返回y
elif n==0:
返回0
其他:
返回str(int(-n))+“i”
#----------二次方程--------------#
a=输入(“输入系数a:”)
当a==0时:
打印“a不得等于0。”
a=输入(“输入系数a:”)
b=输入(“输入系数b:”)
c=输入(“输入系数c:”)
def二次型(a、b、c):
判别式=(b**2)-4(a*c)
如果判别式<0:
打印“想象的”
elif判别式>=0:
Sqrt\u Disc=平方根(判别式)
第一根=(-b+Sqrt\u Disc)/(2*a)
二次方根=(-b-Sqrt_Disc)/(2*a)
返回第一个\u根,第二个\u根
X_1,X_2=二次(a,b,c)

4(a*c)
不是有效的Python。你的意思是
4*a*c
。您可以在数学记数法中使用并置并省略乘法符号,但在Python(或大多数其他编程语言)中则不行。

您需要执行
4*(a*c)
或只是
4*a*c
,因为python认为您试图调用函数
4
您试图将
4
用作函数:

discriminant = (b ** 2) - 4(a * c)
您错过了
*

discriminant = (b ** 2) - 4 * (a * c)
此外,如果您的鉴别力低于0,您将得到一个未绑定的本地异常:

>>> X_1, X_2 = Quadratic(2, 1, 1)
imaginary
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 9, in Quadratic
UnboundLocalError: local variable 'First_Root' referenced before assignment
def Quadratic(a, b, c):
    discriminant = (b ** 2) - 4(a * c)
    if discriminant < 0:
        raise ValueError("imaginary")
    elif discriminant >= 0:
        Sqrt_Disc = Square_Root(discriminant)
        First_Root = (-b + Sqrt_Disc) / (2 * a)
        Second_Root = (-b - Sqrt_Disc) / (2 * a)

    return First_Root, Second_Root
您的
平方根()
函数缺少
x
的默认值:

def Square_Root(n, x=1):
通过这些更改,您的函数实际上可以工作:

>>> Quadratic(1, 3, -4)
(1, -4)

顺便说一句,代码还没有完成。谢谢@BrenBarn。你是说唯一的问题是操作?@user1947570:唯一的问题是你编写操作的方式。您必须实际编写乘法符号(
*
)。想象一下,如果您编写了
a(b*c)
是功能吗?或者
a
是你想要乘的东西?由于这种模糊性,乘法不能是隐式的。帮助:既然平方根函数需要两个参数,我应该在
Sqrt\u Disc=Square\u Root(判别式)
中添加什么才能使二次函数工作?@user1947570:你的意思是你不知道如何使用递归函数
Square\u Root()
?尖沙咀。谢谢你,Martjin Pieters。