Математика 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]}')