What's wrong with my code?

import math

I’m trying to calculate the zeros of a vertex form parabola. The code works when d is equals 0, but doesn’t otherwise.

a = float(input("Insert coefficient a: "))
h = float(input("Insert coefficient h: "))
k = float(input("Insert coefficient k: "))

d = -k/a

if d >= 0:
x_1 = h + math.sqrt(d)
x_2 = h - math.sqrt(d)
else:
x_1 = h + math.sqrt((-k/a))
x_2 = complex(h),-math.sqrt((-k/a))

if d > 0:
print("x\u2081 = ", x_1, " and x\u2082 = ", x_2)
elif d == 0:
print("x\u2081 = ", x_1, “. There is no x\u2082.”)
else:
print("Impossible with real numbers. ")
print("x\u2081 = ", x_1, " and x\u2082 = ", x_2)

import time
time.sleep(5)

import os
import sys

restart = input("\nDo you want to restart the program? [y/n] > ")

if restart == “y”:
os.execl(sys.executable, os.path.abspath(file), *sys.argv)
else:
print("\nThe program will be closed…")
sys.exit(0)

Can you show what does happen when you run it? Your code looks like it might work for d > 0. The concerns I have are:

  • Mixed quotes. All the quotes should be simple single ' or double ". In the middle of your paste, some are complex quotes . I don’t know if that’s an error with the paste or if that’s in your code. Python won’t interpret them as string delimiters though.
  • You create d = -k/a, but then in several other places you don’t bother to use it, continuing to use -k/a in the code. You should be consistent and use one or the other.
  • math.sqrt() can’t handle negative numbers to give complex answers. You probably want to be using cmath.sqrt() instead.
  • running an exec to restart the program is overkill (and done incorrectly). Much better to just make a simple loop. Even a while True:. Then break if the answer to restart isn’t yes.
2 Likes