二次公式函数python

时间:2015-04-27 01:13:16

标签: python

我正在尝试创建一个函数来解决二次公式的根并将它们作为列表返回。我需要确保参数是数字。当a = 0时,它还必须求解根。

def quadratic_roots(a, b, c):

  if type(a) != float and int:
      print('All values must be a int or float. Bitch')
      return None
  if type(b) != float and int:
      print('All values must be a int or float. Bitch')
      return None
  if type(c) != float and int:
      print('All values must be a int or float. Bitch')
      return None

  else:
      if a == 0:
          root = (-c) / b
          list_root = [root]
          return list_root

      elif a == 0 and b == 0:
          empty = []
          return empty

      elif a == 0 and b == 0 and c == 0:
          empty = []
          return empty

      else:
          discriminant = (b ** 2) -  4  * a * c
          root1 = ((-b) - ((discriminant)**.5))/(2*a)
          root2 = ((-b) + ((discriminant)**.5))/(2*a)
          if root1 > root2:
              list_roots = [root2, root1]
              return list_roots
          elif root2 > root1:
              list_roots = [root1, root2]
              return list_roots
          elif root1 == root2:
              list_roots = [root1]
              return list_roots

1 个答案:

答案 0 :(得分:0)

我看到几个问题:

  • 对float或int的检查不正确。
  • 答案是-c / b的情况不仅仅是当a == 0时。当a为0且b和c都不是0.该检查需要先进行。
  • 它不会破坏程序,但是当你总是从if返回时,如果/ elif / else没有服务点,则嵌套。在这种情况下,elif只是在更高级别的if。
  • 如果你没有将你的操作数转换为浮点数并且你使用的是python 2并且你的情况是-c / b,那么如果这些是整数,你将获得整数除法答案而不是正确的浮动点答案。
  • 你没有处理想象的根源。我不知道你想在那里做什么,所以我也没有处理它们。只知道这段代码不能处理判别式为负的情况。

以下是我对代码的看法:

def quadratic_roots(a, b, c):

  if type(a) != float and type(a) != int:
      print('All values must be a int or float. Bitch')
      return None
  if type(b) != float and type(b) != int:
      print('All values must be a int or float. Bitch')
      return None
  if type(c) != float and type(c) != int:
      print('All values must be a int or float. Bitch')
      return None

  a = float(a)
  b = float(b)
  c = float(c)
  if a == 0 and (b == 0 or c == 0):
    return []
  if a == 0:
      root = (-c) / b 
      list_root = [root]
      return list_root

  discriminant = (b ** 2) -  4  * a * c 
  root1 = ((-b) - ((discriminant)**.5))/(2*a)
  root2 = ((-b) + ((discriminant)**.5))/(2*a)
  if root1 > root2:
      list_roots = [root2, root1]
  elif root2 > root1:
      list_roots = [root1, root2]
  else: # roots are equal
      list_roots = [root1]
  return list_roots