尝试创建Python程序以查找二次方的根

时间:2018-09-11 23:27:48

标签: python math ide typeerror

当以ax ^ 2 + bx + c = 0的形式给出a,b和c的值时,我编写了这段代码来计算二次函数的根:

a = input("a")
b = input("b")
c = input("c")
print("Such that ", a, "x^2+", b, "x+", c, "=0,")
def greaterzero(a, b, c):
    x = (((b**2 - (4*a*c))**1/2) -b)/2*a
    return x

def smallerzero(a, b, c):
    x = (-1*((b**2 - (4*a*c))**1/2) -b)/2*a
    return x
if smallerzero(a, b, c) == greaterzero(a, b, c):
    print("There is only one zero for the quadratic given a, b, and c: ", 
greaterzero(a, b, c))
else:
    print ("The greater zero for the quadratic is ", greaterzero(a, b, c))
    print ("The smaller zero for the quadratic is ", smallerzero(a, b, c)) 

当我执行程序(在交互模式下)并分别为a,b和c输入1、2和1时,这是输出:

a1
b2
c1
Such that  1 x^2+ 2 x+ 1 =0,
Traceback (most recent call last):
  File "jdoodle.py", line 13, in <module>
    if smallerzero(a, b, c) == greaterzero(a, b, c):
  File "jdoodle.py", line 11, in smallerzero
    x = (-1*((b**2 - (4*a*c))**1/2) -b)/2
TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'

这是什么问题? 我尚未正式学习如何使用交互模式。我想要一个简单的解释/介绍或一个提供说明的网站/教程。

3 个答案:

答案 0 :(得分:2)

您忘记将输入值转换为数字类型。

a = int(input('a'))a = float(input('a'))

或者,更干净一点:

def input_num(prompt):
    while True:
        try:
            return int(input(prompt + ': '))
        except ValueError:
            print('Please input a number')

a = input_num('a')
# ... etcetera

答案 1 :(得分:0)

这里的问题是输入将带类型的输入作为字符串类型。检查是否可以正常工作:

cdist(XA[:, 0], XB[:, 1])

在这里,您正在将输入的类型从str显式更改为整数,以便可以通过算术运算来处理变量。

答案 2 :(得分:0)

您不能对字符串进行数学运算。正如A.Lorefice所说,将int放在输入的前面会将给定的字符串更改为整数。