Математика 5 класса в Python в 10 строк

Есть программа в 10 строк, которая вычисляет все возможные ac в D=b^2-4ac

Вопрос собственно в том, возможно ли сделать, что бы результат выдавался отсортированным по n2 а не по n1?

Если что, хотя очевидно после запуска:

n1 = b^2

n2 = D

Otvet = ac

r = int(input()) +1
for i in range(1,r):
  n1 = i ** 2
  for j in range(1,r):
    n2 = j  ** 2
    otvet = n1-n2
    if otvet > 0:
      if otvet % 4 == 0:
        print('D =',i,'^2 (',n1,')- 4',int(otvet/4),'(',otvet,') = ',j,'^2 (',n2,')')

Ответы (2 шт):

Автор решения: BasedBrain

Нашел решение, и дороботал в общем, свою работу выполняет отлично.

Не уверен что решение лучшее, так что критика приветствуется.

И да, теперь переменные названы своими именами.

import math
r = int(math.sqrt(int(input('b^2 = ')))+1)
X=0
O=[]
for b in range(1,r):
  b2 = b **  2
  for d in range(1,r):
    D = d **  2
    ac = b2-D
    if ac > 0:
      if ac % 4 == 0:
          l=str('x^2 + '+str(b)+'x + '+str(int((b2-D)/4)))
          O.insert(X,[D,'=  b^2='+str(b2),'4ac='+str(ac),l])
          X += 1
O.sort()
for x in range(X):
 print (O[x])
print('D = b^2 - 4ac; квадратичная запись без а')
→ Ссылка
Автор решения: n1tr0xs

Если ограничение только на максимальный b^2, то это решение будет более верным:

r = int(int(input('b^2 <= '))**.5) + 1
results = set()
for b in range(r):
    b2 = b**2
    for ac in range(int(b2/4)):
        results.add((b, ac, b2, 4*ac, b2-4*ac))

for res in sorted(results, key=lambda x: x[4]):
    print(f'D = {res[0]}^2 - 4*{res[1]} = {res[2]} - {res[3]} = {res[4]}')
→ Ссылка