是否有办法使这个程序更短/更简单,或者我可以对它进行任何改进?



我编写了一个程序,可以将标准形式的二次方程转换为顶点形式。我是Python和编程的初学者。我以前在StackOverflow上发布过程序,但是收到了很多批评。我正在努力提高我作为一名程序员的技能,我想知道是否有任何方法可以缩短/简化或只是整体改进我写的这个程序?提前感谢!

'''
Standard Form to Vertex Form Converter
Created by Patrick Thomas
'''
#Preliminary Information--------------------------------------------------------
import time
time.sleep(0.5)
print('Standard Form to Vertex Form Converter')
time.sleep(0.5)
goAgain = True
#greatest common divisor funct
def gcd(num, den):
if int(den) == 0:
return int(num)
return gcd(int(den), int(num) % int(den))
#While Loop---------------------------------------------------------------------
while goAgain == True:

#input
time.sleep(0.5)
print('---------------------')
print('ax² + bx + c')
print('---------------------')

a = int(input('a = '))

b = int(input('b = '))

c = int(input('c = '))
print('')

#h calculation
two_a = 2 * a // gcd(2 * a, -b % 2 * a)
neg_b = -b // gcd(2 * a, -b % 2 * a)

#y-int calculation
yInt = a * 0 ** 2 + b * 0 + c
#k calculation
bSquared = b ** 2 // gcd(b ** 2, 4 * a)
four_a = 4 * a // gcd(b ** 2, 4 * a)

#other variables
hNumerator = neg_b
hDenomator = two_a
kNumerator = c * four_a - bSquared
kDenomator = four_a
h = neg_b
k = c * four_a - bSquared
hReverse = neg_b * -1
kNeg = c * four_a - bSquared * -1

#output
if hDenomator == 1 and kDenomator == 1:
if a == 1:
if k >= 0:
if hReverse >= 0:
print('f(x) = (x + {})² + {}'.format(int(hReverse),int(k)))
print('Vertex = ({},{})'.format(int(h),int(k)))
print('Axis of Sym = {}'.format(int(h)))
elif hReverse < 0:
print('f(x) = (x - {})² + {}'.format(int(h),int(k)))
print('Vertex = ({},{})'.format(int(h),int(k)))
print('Axis of Sym = {}'.format(int(h)))
elif k < 0:
if hReverse >= 0:
print('f(x) = (x + {})² - {}'.format(int(hReverse),int(kNeg)))
print('Vertex = ({},{})'.format(int(h),int(k)))
print('Axis of Sym = {}'.format(int(h)))
elif hReverse < 0:
print('f(x) = (x - {})² - {}'.format(int(h),int(kNeg)))
print('Vertex = ({},{})'.format(int(h),int(k)))
print('Axis of Sym = {}'.format(int(h)))
elif a == -1:
if k > 0:
if hReverse >= 0:
print('f(x) = -(x + {})² + {}'.format(int(hReverse),int(k)))
print('Vertex = ({},{})'.format(int(h),int(k)))
print('Axis of Sym = {}'.format(int(h)))
elif hReverse < 0:
print('f(x) = -(x - {})² + {}'.format(int(h),int(k)))
print('Vertex = ({},{})'.format(int(h),int(k)))
print('Axis of Sym = {}'.format(int(h)))
elif k < 0:
if hReverse >= 0:
print('f(x) = -(x + {})² - {}'.format(int(hReverse),int(kNeg)))
print('Vertex = ({},{})'.format(int(h),int(k)))
print('Axis of Sym = {}'.format(int(h)))
elif hReverse < 0:
print('f(x) = -(x - {})² - {}'.format(int(h),int(kNeg)))
print('Vertex = ({},{})'.format(int(h),int(k)))
print('Axis of Sym = {}'.format(int(h)))
else:
if k >= 0:
if hReverse >= 0:
print('f(x) = {}(x + {})² + {}'.format(a,int(hReverse),int(k)))
print('Vertex = ({},{})'.format(int(h),int(k)))
print('Axis of Sym = {}'.format(int(h)))
elif hReverse < 0:
print('f(x) = {}(x - {})² + {}'.format(a,int(h),int(k)))
print('Vertex = ({},{})'.format(int(h),int(k)))
print('Axis of Sym = {}'.format(int(h)))
elif k < 0:
if hReverse >= 0:
print('f(x) = {}(x + {})² - {}'.format(a,int(hReverse),int(kNeg)))
print('Vertex = ({},{})'.format(int(h),int(k)))
print('Axis of Sym = {}'.format(int(h)))
elif hReverse < 0:
print('f(x) = {}(x - {})² - {}'.format(a,int(h),int(kNeg)))
print('Vertex = ({},{})'.format(int(h),int(k)))
print('Axis of Sym = {}'.format(int(h)))

elif hDenomator > 1 and kDenomator > 1:
if a == 1:
if k >= 0:
if hReverse >= 0:
print('f(x) = (x + {}/{})² + {}/{}'.format(int(hReverse),int(hDenomator),int(kNumerator),int(kDenomator)))
print('Vertex = ({}/{},{}/{})'.format(int(hNumerator),int(hDenomator),int(kNumerator),int(kDenomator)))
print('Axis of Sym = {}/{}'.format(int(hNumerator),int(hDenomator)))
elif hReverse < 0:
print('f(x) = (x - {}/{})² + {}/{}'.format(int(hNumerator),int(hDenomator),int(kNumerator),int(kDenomator)))
print('Vertex = ({}/{},{}/{})'.format(int(hNumerator),int(hDenomator),int(kNumerator),int(kDenomator)))
print('Axis of Sym = {}/{}'.format(int(hNumerator),int(hDenomator)))
elif k < 0:
if hReverse >= 0:
print('f(x) = (x + {}/{})² - {}/{}'.format(int(hReverse),int(hDenomator),int(kNeg),int(kDenomator)))
print('Vertex = ({}/{},{}/{})'.format(int(hNumerator),int(hDenomator),int(kNumerator),int(kDenomator)))
print('Axis of Sym = {}/{}'.format(int(hNumerator),int(hDenomator),int(kNumerator),int(kDenomator)))
elif hReverse < 0:
print('f(x) = (x - {}/{})² - {}/{}'.format(int(hNumerator),int(hDenomator),int(kNeg),int(kDenomator)))
print('Vertex = ({}/{},{}/{})'.format(int(hNumerator),int(hDenomator),int(kNumerator),int(kDenomator)))
print('Axis of Sym = {}/{}'.format(int(hNumerator),int(hDenomator)))
elif a == -1:
if k >= 0:
if hReverse >= 0:
print('f(x) = -(x + {}/{})² + {}/{}'.format(int(hReverse),int(k)))
print('Vertex = ({}/{},{}/{})'.format(int(h),int(k)))
print('Axis of Sym = {}/{}'.format(int(h)))
elif hReverse < 0:
print('f(x) = -(x - {}/{})² + {}/{}'.format(int(h),int(k)))
print('Vertex = ({}/{},{}/{})'.format(int(h),int(k)))
print('Axis of Sym = {}/{}'.format(int(h)))
elif k < 0:
if hReverse >= 0:
print('f(x) = -(x + {}/{})² - {}/{}'.format(int(hReverse),int(hDenomator),int(kNeg),int))
print('Vertex = ({}/{},{}/{})'.format(int(hNumerator),int(hDenomator),int(kNumerator),int(kDenomator)))
print('Axis of Sym = {}/{}'.format(int(hNumerator),int(hDenomator)))
elif hReverse < 0:
print('f(x) = -(x - {}/{})² - {}/{}'.format(int(hNumerator),int(hDenomator),int(kNeg),int(kDenomator)))
print('Vertex = ({}/{},{}/{})'.format(int(hNumerator),int(hDenomator),int(kNumerator),int(kDenomator)))
print('Axis of Sym = {}/{}'.format(int(hNumerator),int(hDenomator)))
else:
if k >= 0:
if hReverse >= 0:
print('f(x) = {}(x + {}/{})² + {}/{}'.format(a,int(hReverse),int(hDenomator),int(kNumerator),int(kDenomator)))
print('Vertex = ({}/{},{}/{})'.format(int(hNumerator),int(hDenomator),int(kNumerator),int(kDenomator)))
print('Axis of Sym = {}/{}'.format(int(hNumerator),int(hDenomator)))
elif hReverse < 0:
print('f(x) = {}(x - {}/{})² + {}/{}'.format(a,int(hNumerator),int(hDenomator),int(kNumerator),int(kDenomator)))
print('Vertex = ({}/{},{}/{})'.format(int(hNumerator),int(hDenomator),int(kNumerator),int(kDenomator)))
print('Axis of Sym = {}/{}'.format(int(hNumerator),int(hDenomator)))
elif k < 0:
if hReverse >= 0:
print('f(x) = {}(x + {}/{})² - {}/{}'.format(a,int(hReverse),int(hDenomator),int(kNeg),int(kDenomator)))
print('Vertex = ({}/{},{}/{})'.format(int(hNumerator),int(hDenomator),int(kNumerator),int(kDenomator)))
print('Axis of Sym = {}/{}'.format(int(hNumerator),int(hDenomator)))
elif hReverse < 0:
print('f(x) = {}(x - {}/{})² - {}/{}'.format(a,int(hNumerator),int(hDenomator),int(kNeg),int(kDenomator)))
print('Vertex = ({}/{},{}/{})'.format(int(hNumerator),int(hDenomator),int(kNumerator),int(kDenomator)))
print('Axis of Sym = {}/{}'.format(int(hNumerator),int(hDenomator)))

elif hDenomator > 1 and kDenomator == 1:
if a == 1:
if k >= 0:
if hReverse >= 0:
print('f(x) = (x + {}/{})² + {}'.format(int(hReverse),int(hDenomator),int(k)))
print('Vertex = ({}/{},{})'.format(int(hNumerator),int(hDenomator),int(k)))
print('Axis of Sym = {}/{}'.format(int(hNumerator),int(hDenomator)))
elif hReverse < 0:
print('f(x) = (x - {}/{})² + {}'.format(int(hNumerator),int(hDenomator),int(k)))
print('Vertex = ({}/{},{})'.format(int(hNumerator),int(hDenomator),int(k)))
print('Axis of Sym = {}/{}'.format(int(hNumerator),int(hDenomator)))
elif k < 0:
if hReverse >= 0:
print('f(x) = (x + {}/{})² - {}'.format(int(hReverse),int(hDenomator),int(kNeg)))
print('Vertex = ({}/{},{})'.format(int(hNumerator),int(hDenomator),int(k)))
print('Axis of Sym = {}/{}'.format(int(hNumerator),int(hDenomator)))
elif hReverse < 0:
print('f(x) = (x - {}/{})² - {}'.format(int(hNumerator),int(hDenomator),int(kNeg)))
print('Vertex = ({}/{},{})'.format(int(hNumerator),int(hDenomator),int(k)))
print('Axis of Sym = {}/{}'.format(int(hNumerator),int(hDenomator)))
elif a == -1:
if k >= 0:
if hReverse >= 0:
print('f(x) = -(x + {}/{})² + {}'.format(int(hReverse),int(hDenomator),int(k)))
print('Vertex = ({}/{},{})'.format(int(hNumerator),int(hDenomator),int(k)))
print('Axis of Sym = {}/{}'.format(int(hNumerator),hDenomator))
elif hReverse < 0:
print('f(x) = -(x - {}/{})² + {}'.format(int(hNumerator),int(hDenomator),int(k)))
print('Vertex = ({}/{},{})'.format(int(hNumerator),int(hDenomator),int(k)))
print('Axis of Sym = {}/{}'.format(int(hNumerator),int(hDenomator)))
elif k < 0:
if hReverse >= 0:
print('f(x) = -(x + {}/{})² - {}'.format(int(hReverse),int(hDenomator),int(kNeg)))
print('Vertex = ({}/{},{})'.format(int(hNumerator),int(hDenomator),int(k)))
print('Axis of Sym = {}/{}'.format(int(hNumerator),int(hDenomator)))
elif hReverse < 0:
print('f(x) = -(x - {}/{})² - {}'.format(int(hNumerator),int(hDenomator),int(kNeg)))
print('Vertex = ({}/{},{})'.format(int(hNumerator),int(hDenomator),int(k)))
print('Axis of Sym = {}/{}'.format(int(hNumerator),int(hDenomator)))
else:
if k >= 0:
if hReverse >= 0:
print('f(x) = {}(x + {}/{})² + {}'.format(a,int(hReverse),int(hDenomator),int(k)))
print('Vertex = ({}/{},{})'.format(int(hNumerator),int(hDenomator),int(k)))
print('Axis of Sym = {}/{}'.format(int(hNumerator),int(hDenomator)))
elif hReverse < 0:
print('f(x) = {}(x - {}/{})² + {}'.format(a,int(hNumerator),int(hDenomator),int(k)))
print('Vertex = ({}/{},{})'.format(int(hNumerator),int(hDenomator),int(k)))
print('Axis of Sym = {}/{}'.format(int(hNumerator),int(hDenomator)))
elif k < 0:
if hReverse >= 0:
print('f(x) = {}(x + {}/{})² - {}'.format(a,int(hReverse),int(hDenomator),int(kNeg)))
print('Vertex = ({}/{},{})'.format(int(hNumerator),int(hDenomator),int(k)))
print('Axis of Sym = {}/{}'.format(int(hNumerator),int(hDenomator)))
elif hReverse < 0:
print('f(x) = {}(x - {}/{})² - {}'.format(a,int(hNumerator),int(hDenomator),int(kNeg)))
print('Vertex = ({}/{},{})'.format(int(hNumerator),int(hDenomator),int(k)))
print('Axis of Sym = {}/{}'.format(int(hNumerator),int(hDenomator)))

elif hDenomator == 1 and kDenomator > 1:
if a == 1:
if k >= 0:
if hReverse >= 0:
print('f(x) = (x + {})² + {}/{}'.format(int(hReverse),int(kNumerator),int(kDenomator)))
print('Vertex = ({},{}/{})'.format(int(h),int(kNumerator),int(kDenomator)))
print('Axis of Sym = {}'.format(int(h)))
elif hReverse < 0:
print('f(x) = (x - {})² + {}/{}'.format(int(h),int(kNumerator),int(kDenomator)))
print('Vertex = ({},{}/{})'.format(int(h),int(kNumerator),int(kDenomator)))
print('Axis of Sym = {}'.format(int(h)))
elif k < 0:
if hReverse >= 0:
print('f(x) = (x + {})² - {}/{}'.format(int(hReverse),int(kNeg),int(kDenomator)))
print('Vertex = ({},{})'.format(int(h),int(kNumerator),int(kDenomator)))
print('Axis of Sym = {}'.format(int(h)))
elif hReverse < 0:
print('f(x) = (x - {})² - {}/{}'.format(int(h),int(kNeg),int(kDenomator)))
print('Vertex = ({},{}/{})'.format(int(h),int(kNumerator),int(kDenomator)))
print('Axis of Sym = {}'.format(int(h)))
elif a == -1:
if k >= 0:
if hReverse >= 0:
print('f(x) = -(x + {})² + {}/{}'.format(int(hReverse),int(kNumerator),int(kDenomator)))
print('Vertex = ({},{}/{})'.format(int(h),int(kNumerator),int(kDenomator)))
print('Axis of Sym = {}'.format(int(h)))
elif hReverse < 0:
print('f(x) = -(x - {})² + {}/{}'.format(int(h),int(kNumerator),int(kDenomator)))
print('Vertex = ({},{}/{})'.format(int(h),int(kNumerator),int(kDenomator)))
print('Axis of Sym = {}'.format(int(h)))
elif k < 0:
if hReverse >= 0:
print('f(x) = -(x + {})² - {}/{}'.format(int(hReverse),int(kNeg)))
print('Vertex = ({},{}/{})'.format(int(h),int(kNumerator),int(kDenomator)))
print('Axis of Sym = {}'.format(int(h)))
elif hReverse < 0:
print('f(x) = -(x - {})² - {}/{}'.format(int(h),int(kNeg),int(kDenomator)))
print('Vertex = ({},{}/{})'.format(int(h),int(kNumerator),int(kDenomator)))
print('Axis of Sym = {}'.format(int(h)))
else:
if k >= 0:
if hReverse >= 0:
print('f(x) = {}(x + {})² + {}/{}'.format(a,int(hReverse),int(kNumerator),int(kDenomator)))
print('Vertex = ({},{}/{})'.format(int(h),int(kNumerator),int(kDenomator)))
print('Axis of Sym = {}'.format(int(h)))
elif hReverse < 0:
print('f(x) = {}(x - {})² + {}/{}'.format(a,int(h),int(kNumerator),int(kDenomator)))
print('Vertex = ({},{}/{})'.format(int(h),int(kNumerator),int(kDenomator)))
print('Axis of Sym = {}'.format(int(h)))
elif k < 0:
if hReverse >= 0:
print('f(x) = {}(x + {})² - {}/{}'.format(a,int(hReverse),int(kNeg),int(kDenomator)))
print('Vertex = ({},{}/{})'.format(int(h),int(kNumerator),int(kDenomator)))
print('Axis of Sym = {}'.format(int(h)))
elif hReverse < 0:
print('f(x) = {}(x - {})² - {}/{}'.format(a,int(h),int(kNeg),int(kDenomator)))
print('Vertex = ({},{}/{})'.format(int(h),int(kNumerator),int(kDenomator)))
print('Axis of Sym = {}'.format(int(h)))
#End of Program-----------------------------------------------------------------

不要显式计算表达式的布尔值。例子:

if k >= 0:
if hReverse >= 0:
...
elif hReverse < 0:
...
elif k < 0:

测试hReverse < 0没有意义,因为你已经测试了hReverse >= 0。同样的事情也适用于k < 0,你可以使用else子句。如果需要可读性,请使用注释

:

if k >= 0:
if hReverse >= 0:
...
else:                  # hReverse < 0
...
else:                      # k < 0

如果a不等于1-1会发生什么?我不认为你会处理那个案子。

我对你的附近的多余的印刷有复杂的感情。格式语句。考虑对第一个块

进行简单的缩减
if hDenomator == 1 and kDenomator == 1:
if a == 1:
if k >= 0:
if hReverse >= 0:
print('f(x) = (x + {})² + {}'.format(int(hReverse),int(k)))
else:
print('f(x) = (x - {})² + {}'.format(int(h),int(k)))
print('Vertex = ({},{})'.format(int(h),int(k)))
print('Axis of Sym = {}'.format(int(h)))

相关内容

最新更新