Üs olarak 2 hariç herhangi bir sayı girdiğimde sonuç alamıyorum sebebi nedir?

Ekran görüntüsü 2021-05-29 184758

Kodlarınızı resim olarak atmak yerine burada bahsedilen şekilde yazarsanız daha hızlı cevaplarız.

Soruya gelecek olursak,
Anladığım kadarıyla girilen sayının üssünü hesaplama çalışıyorsunuz.
kodlarınızda ufak değişikler yaparak bu hale getirdim.

while True:
    c = 0 
    a = int(input("sayi: "))
    b = int(input("üs: "))
    son_deger = a
    while a>1 and b>1:
        son_deger *= a
        c+=1
        if  c==b-1:
            print(son_deger)
            break

Burada döngü ile üs hesaplamaya çalışıyoruz break o konumdayken 2 haricindeki değerleri hesaplamamızı engelliyor.

son_deger adında bir değişken ekledim. Önceki halinde her döngüde çarptığımız sayı katlanarak artıyor. Bu da örneğin 6^3 değerini 1296 olarak hesaplamamıza sebep oluyordu. Çarpımı farklı bir değişkende tutarak bu sorunu da çözdük.

1 Beğeni

Yapmış olduğunuz tek hata, a’yı her seferinde kendisi ile çarpmak. Aslında söylendiğinde yanlış değilmiş gibi görünüyor ama şöyle söyleyeyim.

Diyelim ki a = 2 ve b = 4.

  1. a = 2
  2. a = 2*2 = 4
  3. a = 4*4 = 16
  4. a = 16*16 = 256 Görmüş olduğunuz gibi burada 2^4 değil de 2^8 hesaplanmış oldu çünkü biz a’yı her seferinde 2 ile değil de kendisi ile çarpmış olduk. Sonuç alamamanızın sebebini ise çözemedim. Kodunuzun aynısını yaptım ve çalışıyor. Sanırım üs olarak büyük bir sayı giriyordunuz ve yukarıdaki sıkıntıdan ötürü hesaplaması oldukça uzun sürüyordu. Bu tür konularda dikkatli olmalısınız çünkü çok büyük sayılar çok fazla RAM tüketir. Bu da bilgisayarınızın kitlenmesine sebep olabilir.

Gelelim bu kodda nerenin düzeltilmesi gerektiğine.
Eğer a için girdi aldıktan sonra d = a derseniz ve çarpım kısmını da a*= d yaparsanız sorun çözülecektir. Böylece a sayısını her seferinde yalnızca taban değeri ile çarpmış olacaksınız.

while True:
    c = 0
    a = int(input("Taban: "))
    d = a
    b = int(input("Üs: "))
    while a > 1 and b > 1:
        a *= d
        c += 1
        if c == b - 1:
            print(a)
            break