## DoubleTapThat Newbie Poster

Wrote this for my college open evening just to give prospective students a taste of python. added a little "information" section just to bulk it out a bit (this section is slightly messy i know). Not sure if it works in command line, definitely works in IDLE but the command line is outdated on the college machines so bugs such as the trailing return (/r on the end of inputs) still apply so it is hard to validate.

Hope this is helpful for beginners etc (commented in places so prospective students can at least understand some of what's going on)

``````#import required library
import math

def solver(a,b,c):

###############################################################
### this function is used to solve the quadratic equation   ###
### and includes the mathematics required to do so properly ###
###############################################################

#solve the discriminant and square root it
discriminant = (b*b)-(4*a*c)
rootedDiscriminant = math.sqrt(discriminant)

#solve for both solutions of x
solution1 = ((-b)+rootedDiscriminant)/(2*a)
solution2 = ((-b)-rootedDiscriminant)/(2*a)

#decides whether equation has 1 or 2 roots
if solution1 == solution2:
else:

#returns the answer to the main program

#################################################
#################################################

#sets a loop so that the menu reappears after each use

exitprogram = False
while exitprogram == False:

print(">>>>>-----------------------------------<<<<<")
print(">>>>>-----------------------------------<<<<<")
print("")
print("")
print("1. Solve a quadratic equation of the form ax^2 + bx + c = 0")
print("2. Learn about quadratic equations and their uses in industry, mathematics and science")
print("3. Exit")
print("")

#Asks for an input and validates it to prevent crashing from unknown input types (i.e. string, decimal)
accepted = False
while accepted == False:
try:
choice = int(input("Please select an option using its corresponding number (e.g. 3) >>> "))
accepted = True
except:
print("")
print("INVALID INPUT. PLEASE ENTER ONE INTEGER ONLY")
print("")
accepted = False

#Menu accepts input for choice 1 and validates it (solving an equation)
if choice == 1:
validinputs = False
while validinputs == False:
try:
print("")
print(""">>>>------------------------------------------------------------------------------<<<<""")
print(""">>>> IMPORTANT: Please make sure your equation is of the form "ax^2 + bx + c = 0" <<<<""")
print(""">>>>------------------------------------------------------------------------------<<<<""")
print("")
print("")
print("")
validinputs = True
try:

#trys to call the function to solve the equation with given values.
#If the solver can find the answer to the problem then it will return
#either one or two values in a list (dependant on whether the equation
#has one or two distinct real roots. If the solver cannot find the answer
#it skips to the "except" section below

problemsolution = solver(number1,number2,number3)
if len(problemsolution) == 2:
for each in problemsolution:
print("")
print("One root of the equation is ",each)
else:
print("")
print("The equation has one real root: ",problemsolution)
print("")
exitloop = False
while exitloop == False:
print("")
if selection == "n":
exit()
elif selection == "y":
exitloop = True
print("")
print("----------------------------------------------------------")
print("")
else:
print("INVALID OPTION")
except:

#If the function crashes upon running then it must be trying
#to calculate a non-real number (in this case the program will be trying
#to compute the square root of a negative number. This gives an imaginary
#number and will crash the function. We can use this and realise the equation
#must have no real roots, and use this information to interpret the crash.

print("")
print("The Equation has no real roots.")
exitloop = False
while exitloop == False:
if selection == "n":
exit()
elif selection == "y":
exitloop = True
print("")
print("----------------------------------------------------------")
print("")
else:
print("INVALID OPTION")

except:
print("INVALID INPUT. PLEASE ENTER ONE NUMBER VALUE ONLY")
validinputs = False
elif choice == 2:
print("")
print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<")
print(">>> USES OF QUADRATIC EQUATIONS IN A REALISTIC CONTEXT <<<")
print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<")
print("")
print("Quadratic equations have many uses in the world. They can be")
print("used to solve many challenging problems. Whether you realise")
print("it or not, you will have used or experienced something that")
print("has been designed and created to be as it is as a direct result")
print("For instance, arc of light the headlights on a car make can be")
print("worked out using the quadratic formula, allowing automotive engineers")
print("to work out how bright and how big to make the bulbs in headlights.")
print("----------------------------------------------------------")
print("below are some common uses of quadratic equations:")
print("")
print("- Working out the time of flight of a projectile (for example a bullet)")
print("")
print("- Calculating the perfect trajectory of a drop goal in a rugby match")
print("")
print("- Calculating stopping distances of cars (this is useful for car safety design")
print("")
print("- Used extensively in quantum theory")
print("")
print("- Structural problems for architects and civil engineers")
print("")
print("- Clock designs")
print("")
print("- Economics and financial problems (for example investment models")
print("")
print("----------------------------------------------------------")
exitloop = False
while exitloop == False:
if selection == "n":
exit()
elif selection == "y":
exitloop = True
print("")
print("----------------------------------------------------------")
print("")
else:
print("INVALID OPTION")
elif choice == 3:
exit()
else:
print("")
print("")

if __name__ == "__main__":

#####################################################################
### calls the menu function automatically when the program starts ###
#####################################################################