Bu iki mükemmel sayı kodundaki fark ne?

Olacak olacak. Kodunu düzelttim.

def arkadas(x,y):
    x_bolenleri_toplami=0
    y_bolenleri_toplami=0
    for i in range(1,x):
        if x % i ==0:
            x_bolenleri_toplami+=i
    for i in range(1,y):
        if y % i ==0:
            y_bolenleri_toplami+=i
    if x_bolenleri_toplami==y and y_bolenleri_toplami==x:
        return True
    
print(arkadas(220,284)) #True
print(arkadas(222,222)) #None

Eğer iki arkadaş sayı gönderirse fonksiyonun True değerini gönderiyor. Arkadaş sayı olmazlarsa da None değeri geliyor geriye.

1 Beğeni

Üstad bu hatırlatma için çok teşekkür ederim.
Peki bunun gibi birden fazla parametreli fonksiyonları döngülere nasıl uygulayabilirim ? While True kullanarak mı ? Mesela 10 bine kadar bul demiştiniz ya. Şöyle bir şey ekledim aşağıya ama parametre eksik diye hata verdi.

for i in range(1,10001):
    for i in range(1,10001):
        if arkadas()==True:
            print(arkadas())

i 1 den başlayıp 10bine kadar gidecekken yeniden bir i döngüsü başlatmışsın. Diğer döngü değişkeni j olsa mesela?

Ayrıca arkadas(i,j) gibi iki tane parametre almalı.

Başaramadık.

for i in range(1,10001):
    for j in range(1,10001):
        if arkadas(i,j)==True:
            print(arkadas(),"Arkadaş sayılardır")

Son print içinde i ve j yi yazdırırsan olacak gibi. Fonksiyona gerek yok artık.

Onu da denedim ama bir çıktı alamıyorum. Error mesajı bile yok. Kodun son hali bu :

def arkadas(x,y):
    x_bolenleri_toplami=0
    y_bolenleri_toplami=0
    for i in range(1,x):
        if x % i ==0:
            x_bolenleri_toplami+=i
    for i in range(1,y):
        if y % i ==0:
            y_bolenleri_toplami+=i
    if x_bolenleri_toplami==y and y_bolenleri_toplami==x:
        return True




for i in range(1,10001):
    for h in range(1,10001):
        if arkadas(i,h)==True:
            print(arkadas(i,h),"Arkadaş sayılardır")

Sadece son satırı

print(i,h,"arkadaş")

Olarak değiştir.

Yine hiç bir çıktı yok.

def arkadas(x,y):
    x_bolenleri_toplami=0
    y_bolenleri_toplami=0
    for i in range(1,x):
        if x % i ==0:
            x_bolenleri_toplami+=i
    for i in range(1,y):
        if y % i ==0:
            y_bolenleri_toplami+=i
    if x_bolenleri_toplami==y and y_bolenleri_toplami==x:
        return True




for i in range(1,10001):
    for h in range(1,10001):
        if arkadas(i,h)==True:
            print(i,h,"Arkadaş sayılardır")

Program çalışıyor da kod o kadar kötü ki saatler sürüyor:)

Bir süre bekleyince fark ettim gerçekten çalıştı. Neden o kadar uzun sürüyor acaba ? İyi kod ve kötü kod vardır biliyorum ama bu kadar da oluyor mu ?

Her i değeri için 10bin defa h değerine bakıyor (gereksiz yere)
Ayrıca her i ve h değeri için bölenler toplamına bakıyor (o da gereksiz)
Ayrıca mükemmel sayıları da arkadaş sayı sanıyor. (Örneğin 6 ve 6 )

Kodu mümkün olduğunca gereksiz çalışmalardan arındırmak ve hızlı hale getirmek de senin görevin.

1 Beğeni