Çö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.
Katılım
28 Kasım 2014
Mesajlar
3.557
Çözümler
58
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:
@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
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…