Öklid programı yapmaya çalıştım ama olmadı yardımcı olur musunuz

Program 8 sayısından sonra yanlış değerler veriyor.Nerede yanlış yaptım acaba?3 tane for döngüsü kullanmam mı sıkıntı çıkarmış?

def oklid():
    liste = list()
    for a in range(1,101):
        for b in range(1,101):
            for c in range(1,101):
                if c**2 == a**2 + b**2:
                    liste.append((a,b,c))
                elif b **2 == a**2 + c**2:
                    liste.append((a, b, c))
                elif a **2 == b**2 + c**2:
                    liste.append((a, b, c))
               
    return liste

print(oklid())

Merhaba, bence algoritmada yanlışlık yok ama zannederim aynı çiftleri bir daha bastirmak istemiyorsunuz . Benim çıkarımım bu ama yanlış da olabilir. Problemi anlamama biraz daha yardım edebilir misiniz?

Bu arada anladığım kadarıyla bir implementation yaptım. Belki pythonla haşır neşir olan arkadaşlardan daha iyi implementationlar gelebilir.

def oklid():
    oklit_kume = set()
    for a in range(1,101):
        for b in range(1,101):
            for c in range(1,101):
                # elemanlar kucukten buyuge
                # siralansin ki hem hipotenusu
                # bilelim hem de her elemandan
                # sadece bir tane bulunsun
                tmp = sorted([a, b, c]) 
                if(tmp[0]**2 + tmp[1]**2 == tmp[2]**2):
                    oklit_kume.add((tmp[0], tmp[1], tmp[2]))
                    
               
    return oklit_kume

# sonuclari sirali olarak bastirmak istersek
res = sorted(list(oklid()))

for i in res:
    print(i)

İyi geceler.

Edit:

Algoritma optimize edildi. Artık daha hızlı çalışabilir.

from math import sqrt
def oklid():
    oklit_kume = list()
    for a in range(1,101):
        for b in range(a,101):
            g = int(sqrt(a**2 + b**2))
            if(g**2 == a**2 + b**2):
                oklit_kume.append((a, b, g))
                    
               
    return oklit_kume

for i in oklid():
    print(i)

edit2:
Bu linkte güzel bir yöntem daha var

Tamamdır teşekkürler sizin ki daha mantıklı müsait olunca deneyeceğim

1 Beğeni