Çö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.543
Çö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.
Python ile mükemmel sayı hesaplamak güzel kafaymış. Nereye kadar gidersiniz bilmem ama çok yavaş olacağına bahse girerim.

Etiketlendiğim için yazsam mı bilemedim. @Zakramoreas hatayı görmüş ve güzelce anlatmış. Pyhton'da girdiler cidden kafa karıştırabiliyor. Tavsiye olarak bloklar arası boşluk kullanmanız. Aslında kullanmışsınız ama for içerisinde tekrar for açıyorsanız bir boşluk bırakıp kullanmak daha görünür hale getiriyor bence. İçerideki şey if de olabilir. Veya birkaç benzer işi yapan kod satırı. Fonksiyonun ilk 3 satırı gibi.

Bu arada direkt menzil = int(input("Bir menzil giriniz: ")) şeklinde yapabilirsin.
 
Python ile mükemmel sayı hesaplamak güzel kafaymış.
Verilen algoritmayı tüm dillerde yazmaya çalışıyorum.

Boşluklara dikkat ediyorum fakat programda her toplamda bir kontrol yapmak istemiştim, hatalıymış.

Bu arada direkt menzil = int(input("Bir menzil giriniz: ")) şeklinde yapabilirsin.
Normalde o şekilde yapmıştım fakat daha önce inputtan kaçış için kod eklemiştim (q), sadeleştirince arada hata verdi altına direkt dönüşüm yapayım dedim.
 

Yeni konular

Geri
Yukarı