1
\$\begingroup\$

I am fairly new to Python 3. Is there a way to implement a +/- function into a single line of code? In this simple quadratic formula solver function I wrote, I used two separate variables and returned them both. Is there a cleaner way to do this?

def Quadratic_Solver(a,b,c):

    """
    This function returns solution to a univariate (single variable) 

    quadratic equation 0 = ax2 + bx + c, where a is not 0.

    Args:

    * a (float or int) - the value represents coefficient of degree 

                     variable 2

    * b (float or int) - the value represents coefficient of degree

                     variable 1

    * c (float or int) - the value represents the constant

    Returns:

    * two solutions for x (float)

    """
    try:
        a = float(a)
        b = float(b)
        c = float(c)
        sol1 = (-b + (b**2 - 4*a*c)**0.5)/(2*a)
        sol2 = (-b - (b**2 - 4*a*c)**0.5)/(2*a)
        return (sol1, sol2)

    except:
        print("Input variables are not floats")
\$\endgroup\$
  • 2
    \$\begingroup\$ In principle, you could write a function returning a special object which defines how arithmetical operators work on it, but it's hard, slow and... Python is just a wrong language to do that. My way around the problem would be to capture the repetitive parts of the calculation into special variables, say twice_a = 2 * a and discriminant = (b**2 - 4 * a * c)**0.5, and then write return -b + discriminant / twice_a, -b - discriminant / twice_a. \$\endgroup\$ – wvxvw Nov 30 '17 at 11:01
  • 1
    \$\begingroup\$ @wvxvw Good idea, although twice_a seems a bit of an overkill \$\endgroup\$ – Ludisposed Nov 30 '17 at 11:07
  • \$\begingroup\$ Good comment, but I think turning \$ 2a \$ into a variable of its own is overkill. \$\endgroup\$ – Daniel Nov 30 '17 at 11:09
  • \$\begingroup\$ Psuedo-code: for i (-1,1) {push(results, (-b + i*(b**2 - 4*a*c)**0.5)/(2*a) and then return the results array. \$\endgroup\$ – Barry Carter Nov 30 '17 at 16:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.