Programı çalıştırıp klavyeden 153 girdiğinde
basamak_sayisi = 3
sayi = 153
gecici_sayi = 153
oluyor.
İnternetten baktığım kadarı ile bir sayının Armstrong sayısı olabilmesi için her basamağındaki rakamın, o sayının basamak sayısı kadar üssü alınıp toplandığında kendisine eşit olması gerekiyor. Yani 153 sayısını test etmek için her bir basamağını tek tek ele alacağımız için toplamda 3 kez döngüye girmemiz lazım, yada 1453 sayısını inceleseydik her bir basamağını incelemek için toplamda 4 kez döngüye girmiş olacaktık. Bunu sağlamak için gecici_sayi //= 10 işlemi kullanılarak her seferinde gecici_sayi 10’a bölünüp bölümün tam sayı kısmı alınmış. Mantıklı, döngü içine girerek deneyelim…
gecici_sayi //= 10 # 1. TUR: 153 //= 10 işlemi sonucunda gecici_sayi = 15 olur
gecici_sayi //= 10 # 2. TUR: 15 //= 10 işlemi sonucunda gecici_sayi = 1 olur
gecici_sayi //= 10 # 3. TUR: 1 //= 10 işlemi sonucunda gecici_sayi = 0 olur
while içerisindeki koşul gereği gecici_sayi nın son değeri 0’dan büyük olmadığı (sıfıra eşit) için artık döngüye girmiyor. Yani gecici_sayi //= 10 işlemi, kullanıcının klavyeden girdiği sayının basamak sayısı kadar döngüye girilmesini sağlıyor. Tabi döngü içerisindeki her adımda gecici_sayi nın 10 ile bölümünden kalan hesaplanarak o anki sayının 1’ler basamağındaki rakam “basamak” değişkenine atanıyor. Böylece sırasıyla 153 sayısı için 3’ü, 5’i, ve 1’i alıp bunların tek tek 3. kuvvetini alıp toplam değişkenine ekleyerek atayabiliyoruz. Kodları daha iyi anlamak için aralara print fonksiyonu ekleyebilirsin.
sayı = input("Sayı:")
basamak_sayisi = len(sayı)
sayı = int(sayı)
basamak = 0
toplam = 0
tur = 1
gecici_sayı = sayı
print(sayı, "SAYISI İNCELENİYOR...!")
while (gecici_sayı > 0):
print(tur, ". TUR")
basamak = gecici_sayı % 10
print("İncelenen basamak:", basamak)
toplam += basamak ** basamak_sayisi
print("//= işleminden önce geçici_sayı:", gecici_sayı)
gecici_sayı //= 10
print("//= işleminden sonra geçici_sayı:", gecici_sayı)
print()
tur += 1
if (toplam == sayı):
print(sayı,"bir armstrong sayısıdır.")
else:
print(sayı,"bir armstrong sayısı değildir.")
İstersen bu problemi daha farklı yollarla da kendin çözmeyi deneyebilirsin. Böylece pratiğini geliştirirsin. Mesela ben şöyle bir yöntem denedim,
sayı = input("Sayı:")
basamak_sayisi = len(sayı)
basamak = 0
toplam = 0
for basamak in sayı:
toplam += int(basamak) ** basamak_sayisi
if (toplam == int(sayı)):
print(sayı,"bir armstrong sayısıdır.")
else:
print(sayı,"bir armstrong sayısı değildir.")
Kodları anladıktan sonra mesela şunu deneyebilirsin, 1’den kullanıcının girdiği sayıya kadarki tüm sayıların Armstrong sayı olup olmadığını ekrana bastıran bir program geliştirebilirsin. Böylece döngüleri iç içe de kullanmış olursun.