Çarpanlara ayırma

Merhabalar,

sayi=int(input("sayi gir"))
bölen=2
for i in range(1,sayi):
    if(sayi%bölen==0):
        print(bölen)
        sayi=sayi/bölen
    else:
        bölen+=1

yukarıdaki kod çalışıyor, ancak anlamadığım küçük bir kısım var.

12 sayisini girdiğim zaman 12 nin çarpanları 2,2,3 tür.
Yalnız kod içerisine baktığım zaman. bölen =2 değeri için “sayi=sayi/bölen” kısmında 1 kez bölme işlemini gerçekleştirip +1 arttırması gerekmiyor mu ?

burada şu şekilde mi düşünmem gerekiyor ; (if bloğunda işlem gören bir değişken, koşulu sağladığı sürece yeniden blok içerisinde işlemler baştan alınır) ?
yani if bloğu içerisinde default olarak bi “return” komutu mu var ? :slight_smile:

Abi belkide 12 nin çarpanları 2 2 3 ya 2 yi tek bir kez yazıyordur

Merhaba,

algoritma yanlış kurulmuş. Beraber algoritmayı kuralım mı?

1. bölen değişkenini 2 olarak ayarla.
2. sayi degiskenini kullanıcıdan al
3. (bölen <= sayi)  ise 4. adıma geç yoksa programı sonlandır
4. eğer sayi % bölen == 0 ise bölen değişkenini bastır, sayi = sayi / bölen yap ve 3. adıma geri dön
5. eğer sayi % bölen == 1 ise böleni 1 artır ve 3. adıma geri dön
Hocam siz bir uğraşın, çözemezseniz burada kodunu yazdım
sayi = int(input())
bolen = 2
while(bolen <= sayi):
    if(sayi % bolen == 0):
        print(bolen)
        sayi = sayi / bolen
    else:
        bolen += 1

if bloğu sadece bir kez işler hocam. Döngüyü sağlayanlar while, for dur. if bloğu şudur.

if(sartlar):
    <yukarıdaki sart saglanırsa yapılacak islem.

bknz.

2 Beğeni

Hocam merhaba,

anlatımın için teşekkürler.
yalnız benim verdiğim kod da sayi 1 den büyük olduğu sürece çalışıyor.
benim problemim aynı sayiya 2 kez nasıl bölüyor tek tek arttıracakken 24 yazıyorum çıktı olarak

2
2
2
3

veriyor.
değerinde bölme işlemini gerçekleştirdikten sonra if komutunu bitirmiyorda başamı dönüyor.

Merhaba,
pardon hocam, bir an dalgınlığıma gelmiş, algoritma doğru. Ama biraz garip bir yaklaşım olmuş :thinking:

if komutu içinde break, pass, ``continue, return` içermiyorsa if in içindeki bütün işlemler yapılır.

if(sart):
    islem1
    islem2

islem1 ve islem2 gerçekleşir.

if(sart):
   islem1
   return # fonksiyonlarda kullanılır
   islem2

islem1 çalışır, islem2 çalışmaz.

if(sart):
    islem1
    break # döngülerde kullanılır
    islem2

islem1 calısır, islem2 çalışmaz.

while(sart):
    if(sart1):
        islem1
    else:
        islem2
    islem3
1. sart sağlanmıyorsa programı bitir, yoksa 2. adıma geç.
2. eger sart1 sağlanıyorsa islem1 i yap ve 4. adıma geç yoksa 3. adıma geç
3. eğer sart1 sağlanmıyorsa  islem2 yi yap ve 4. adıma geç.
4. islem3 ü yap ve 1. adıma dön
1 Beğeni

Hocam çok güzel anlattınız Teşekkür ederim.

yeni başlayanlar için küçük tiyolar oldu bunlar.

1 Beğeni

Sizin kodunuz aslında şunu yapıyor girilen sayının 1 eksiği kere döngü oluşturuyor ve her defasında sayı bölünüyormu diye soruyor ve eğer siz başta bölen=1 alırsanız her defasında 1 e bölünecek ama sayı değişmeyecek böylelikle sayı-1 defa 1 bastırmış olacaksınız.
1 her sayıyı böldüğü içinde döngü bitene kadar asla else bloğuna giremeyeceksiniz
2 ile başladığınız zaman sorun ortadan kalkıyor böyle oluncada

Her defasında sayı bölünüyor mu diye nasıl soruyor.
while içinde değilki.
if içerisinde 2 ye bölüm gerçekleştirdikten sonra 1 arttırması gerekmez mi ? (gerekmez ise neden?)
çok karıştı buralar yine.

Eğer siz böleni 1 alırsanız sayınız hiç 2 ye bölünmeyecek ki.
Bölen else duruma girerse artıyor siz 1 aldığınız zaman o artmayacak

tamam sebebini anlamıyorum bende bunun. 1 le işinin bitmediğini nasıl anlıyor.
2. 3. 4. kez neden 1 yazıyor if bloğu içerisinde koşul sağlandığı için başa atmış olmuyor mu ?

şöyle baştan alıyorum siz kullanıcan bir sayı istiyorsunuz ve for döngüsü dışında bir bölen değişkeni tanımlıyorsunuz.
For döngünüz ise sunu yapıyor aslında aşağıdaki işlemleri sayı -1 defa tekrarla siz ordaki i değişkenini bir yere bağlamamışsınız. while döngüsü sonsuza kadar yapıyorya siz ona sınır getirmişsiniz gibi düşünün.
Sonrasında eğer sayınız bölene bölünüyorsa sayıyı değiştirmeye çalışıyorsunuz sayı=sayı/bölen kısmında ama bölen 1 olduğu için sayı değişmiyor.
ve else bloğuna girmeden for döngüsünün diğer adımına geçiyorsunuz (burada bölen hala 1 else bloğuna girmediği için artmadı).Else bloğuna girebilmesi için bölen değişkeninin sayıyıbölmemesi gerekir.
sonra for döngüsünün ikinci adımı ve diğer adımlarındada bölen hep 1 kalıyor

tamam bu kısımı daha iyi anladım.
peki 12 sayısını verdiği zaman kullanıcı bölen 2 den başlayacak.(kodda yazılan gibi)
burada peki 2 2 3 gibi çıktı oluyor hiç 3 e çıkamaması lazım.

kusura bakmayın gerçekten kafamı karıştırdı bu durum.
konu çok uzadı ama

Şöyle ilk durumda bölen 2 olduğu için ilk döngü sonunda sayı 12 bölen 2 giriyor çıkarken sayı 6 bölen 2
ikinci durumda sayı 6 bölen 2 giriyor çıkarken sayı 3 bölen 2
3 durumda sayı 3 2 ye bölünmüyor else durumuna giriyor bölende 3 oluyor.
son durumda da sayı=1 bölen=3 oluyor.Ama döngü bitmiyor taki olay 11 kez tekrarlanana kadar. AMA şartlar sağlanmadığı için birşey basmıyor

1 Beğeni