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")

• 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. – wvxvw Nov 30 '17 at 11:01
• @wvxvw Good idea, although twice_a seems a bit of an overkill – Ludisposed Nov 30 '17 at 11:07
• Good comment, but I think turning $2a$ into a variable of its own is overkill. – Daniel Nov 30 '17 at 11:09
• 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. – Barry Carter Nov 30 '17 at 16:26