Çö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.
 
@HABAR Evet 1-100 arasi mukemmel sayilar 6 ve 28, bende ek olarak 24 de cikiyor. Program hata vermeden calisiyor fakat fazladan sayi cikartiyor. Nerede hata oldugunu cozemedim.
 
"Ş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:


@HABAR satırı kontrol ettim fakat çözemedim. Bir sorun yok gibi görünüyor.
 
@deleted Boşluklarımız birbirinden farklı lütfen dikkat ediniz. Siz her tambolenleri(değişken ismi) sayısı için toplamı kontrol ettiriyorsunuz fakat ben hepsi toplandıktan sonra kontrol ettiriyorum.
 
@Zakramoreas Evet sizin attığınız normal çalışıyor. Bendeki sorun nedir? Her girdi için bir TAB boşluk bırakmıştım.
Tekrar bakıyorum.
 
@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.…