-3 python error-handling quadratic python-2.7
(在没有导入的二次方程中找到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)
Run Code Online (Sandbox Code Playgroud)
您正尝试将其4用作功能:
discriminant = (b ** 2) - 4(a * c)
Run Code Online (Sandbox Code Playgroud)
你错过了*:
discriminant = (b ** 2) - 4 * (a * c)
Run Code Online (Sandbox Code Playgroud)
此外,如果您的判别式低于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
Run Code Online (Sandbox Code Playgroud)
您需要添加一个return,或者更好的是,引发异常:
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
Run Code Online (Sandbox Code Playgroud)
您的Square_Root()函数缺少它的默认值x:
def Square_Root(n, x=1):
Run Code Online (Sandbox Code Playgroud)
通过这些更改,您的功能实际上有效:
>>> Quadratic(1, 3, -4)
(1, -4)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
672 次 |
| 最近记录: |