Çözüldü Mükemmel sayı mantık hatası

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

deleted

Megapat
Katılım
28 Kasım 2014
Mesajlar
3.544
Çözümler
59
Programimin mukemmel sayilari bulan kisminda bir mantik hatasi var, fazladan bir tane mukemmel sayi buluyor. Dil Python.

Python:
def tambolen():
menzil = input('Bir menzil giriniz: ')
menzil = int(menzil)
tambolenleri = [] #tam bolen listesi.
tambolenleri_top = 0.
muk = [] #Mukemmel sayi listesi.

for herbir_sayi in range(1, menzil+1): #Menzildeki her bir sayiyi ele al.
for her_bolen in range(1,herbir_sayi): #Ele alinan sayiya kadar.
if herbir_sayi % her_bolen == 0: #tam boleni kontrol et.
tambolenleri.append(her_bolen) #tam bolense listeye ekle.

for top in tambolenleri: #Tam bolen listesindeki elemanlari al.
tambolenleri_top += top #Hepsini topla.
if tambolenleri_top == herbir_sayi:
muk.append(herbir_sayi) #Toplam sayiya esitse mukemmel listesine ekle.

tambolenleri_top = 0 #Yeni bir sayi icin tam bolenlerin toplamini temizle.
tambolenleri.clear() #Yeni bir sayi icin tam bolenlerin listesini temizle.

print(muk)
tambolen()

Menzil olarak 100 verince 3 cikti vermesi gerekirken 4 tane veriyor.
 
Çözüm
@deleted
Kod aşağıdaki gibi olduğunda tüm sayılar toplanmadan her seferinde kontrol ediyor ve döngü bittiğinde tüm sayılar toplanmadan son kontrol yapılmış oluyor bu yüzden değerler hatalı çıkıyor.

Python:
  for top in tambolenleri: #Tam bolen listesindeki elemanlari al.

      tambolenleri_top += top #Hepsini topla.

      if tambolenleri_top == herbir_sayi:

        muk.append(herbir_sayi) #Toplam sayiya esitse mukemmel listesine ekle.


Eğer ki kod bu şekilde olursa tambolenleri_top'lamına tüm değerler eklenmiş oluyor ve son olarak kontrolünü yapıyor değerler bu yüzden doğru çıkıyor.
Kod:
    for top in tambolenleri: #Tam bolen listesindeki elemanlari al.

      tambolenleri_top += top #Hepsini topla.

    if tambolenleri_top == herbir_sayi:

     muk.append(herbir_sayi) #Toplam sayiya esitse mukemmel listesine ekle.
Programlamadaki hata hakkında bir fikrim yok ama 100'e kadar iki tane mükemmel sayı yok mu? 6 ve 28 olması lazımdı sanırsam.
 
"Şunu yaparsanız düzelir" şeklinde bilgi verebileceğimi sanmıyorum, ama sanki burada bir hata var gibi geldi:
/*
tambolenleri_top += top #Hepsini topla.
*/

Yine de ben topu @Vavien. hocama atayım eğer müsaitse. :)
 
@deleted Kodunuzda hiçbir hata yok sadece boşlukları doğru yapmamışsınız. Python'u bu yüzden sevmiyorum 😒.
Python:
def tambolen():
  menzil = input('Bir menzil giriniz: ')
  menzil = int(menzil)
  tambolenleri = [] #tam bolen listesi.
  tambolenleri_top = 0.
  muk = [] #Mukemmel sayi listesi.
  for herbir_sayi in range(1, menzil+1): #Menzildeki her bir sayiyi ele al.
    for her_bolen in range(1,herbir_sayi): #Ele alinan sayiya kadar.
      if herbir_sayi % her_bolen == 0: #tam boleni kontrol et.
       tambolenleri.append(her_bolen) #tam bolense listeye ekle.
    for top in tambolenleri: #Tam bolen listesindeki elemanlari al.
      tambolenleri_top += top #Hepsini topla.
    if tambolenleri_top == herbir_sayi:
     muk.append(herbir_sayi) #Toplam sayiya esitse mukemmel listesine ekle.
    tambolenleri_top = 0 #Yeni bir sayi icin tam bolenlerin toplamini temizle.
    tambolenleri.clear() #Yeni bir sayi icin tam bolenlerin listesini temizle.
  print(muk)
tambolen()
 
Son düzenleme:
Merhaba, boşluklar aslında var fakat buraya kopyalarken çıkmamış. Resim olarak atayım:
Ekran Görüntüsü (1).png


@HABAR satırı kontrol ettim fakat çözemedim. Bir sorun yok gibi görünüyor.
 
@deleted
Kod aşağıdaki gibi olduğunda tüm sayılar toplanmadan her seferinde kontrol ediyor ve döngü bittiğinde tüm sayılar toplanmadan son kontrol yapılmış oluyor bu yüzden değerler hatalı çıkıyor.

Python:
  for top in tambolenleri: #Tam bolen listesindeki elemanlari al.

      tambolenleri_top += top #Hepsini topla.

      if tambolenleri_top == herbir_sayi:

        muk.append(herbir_sayi) #Toplam sayiya esitse mukemmel listesine ekle.


Eğer ki kod bu şekilde olursa tambolenleri_top'lamına tüm değerler eklenmiş oluyor ve son olarak kontrolünü yapıyor değerler bu yüzden doğru çıkıyor.
Kod:
    for top in tambolenleri: #Tam bolen listesindeki elemanlari al.

      tambolenleri_top += top #Hepsini topla.

    if tambolenleri_top == herbir_sayi:

     muk.append(herbir_sayi) #Toplam sayiya esitse mukemmel listesine ekle.
 
Son düzenleme:
Çözüm

Geri
Yukarı