Eminim daha verimli bir yontemi vardir ama kaba kuvvetle soyle bir cozumum var. (@lokman.gokce nin uyarisi uzerine listenin uzunlugunu da hesaplayan kod paylasiyorum. Bunu yapmak icin decorator kullandik. Gereksiz ama hos bir yontem gostermek istedim)
def decorator(fonksiyon):
def ara_fonksiyon(*argumanlar):
sonuc = fonksiyon(*argumanlar)
return (len(sonuc),sonuc)
return ara_fonksiyon
@decorator
def hesapla(x,y,z,v,n,a1=1,a2=2,a3=3,a4=4):
return [(a,b,c,d) for a in range(0,x+1)
for b in range(0,y+1)
for c in range(0,z+1)
for d in range(0,v+1)
if a*a1+b*a2+c*a3+d*a4==n ]
hesapla(3,3,2,1,12)
#
# SONUC
#
# (8, [ (0, 1, 2, 1),
# (0, 3, 2, 0),
# (1, 2, 1, 1),
# (2, 0, 2, 1),
# (2, 2, 2, 0),
# (2, 3, 0, 1),
# (3, 1, 1, 1),
# (3, 3, 1, 0)]
Burada pythonin list-comprehension
sentaksini kullandik. Matematikte kume semasi gibi isliyorlar. Bunun disinda hesapla
fonksiyonunu tanimlarken $x,y,z,v$ limitleri ve $n$ disinda $a_1$ gibi girdiler verdik ve bunlari belli bir sayiya esitledik (denklemdeki katsayilara). Bu sayede yazdigimiz fonksiyonu baska denklemleri cozmesi icin de kullanabiliriz.
hesapla(3,3,2,1,12,2,3,4,10) ## veya hesapla(3,3,2,1,12,a1=2,a2=3,a3=4,a4=10)
#[(1, 0, 0, 1),
# (1, 2, 1, 0),
# (2, 0, 2, 0),
# (3, 2, 0, 0)]