Python While döngüsü sorusu

Eray Temel

Femtopat
Katılım
20 Temmuz 2022
Mesajlar
11
Daha fazla  
Cinsiyet
Erkek
Ekte bıraktığım döngüde 1'den 20ye kadar olan çift sayıları yazdırmaya çalışıyorum fakat sonsuza kadar bütün çift sayıları yazıyor. break komutunu 21'e göre ayarladığımda sorun çözülüyor fakat neden olduğunu anlayamadım. Yardımcı olur musunuz?
 

Dosya Ekleri

  • Ekran görüntüsü 2023-05-28 220558.png
    Ekran görüntüsü 2023-05-28 220558.png
    6,9 KB · Görüntüleme: 116
Son düzenleyen: Moderatör:
Ekte bıraktığım döngüde 1'den 20ye kadar olan çift sayıları yazdırmaya çalışıyorum fakat sonsuza kadar bütün çift sayıları yazıyor. Break komutunu 21'e göre ayarladığımda sorun çözülüyor fakat neden olduğunu anlayamadım. Yardımcı olur musunuz?

Düzeltemezsiniz bu bir sorun değil sayılar 0'dan başlıyor makinelerde o yüzden kod 21 yaptığınızda 20 algılıyor.
 
while True ne demek biliyor musunuz?

1'den 20ye kadar olan çift sayıları yazdırmaya çalışıyorum.
Çözüm bu. 20 yerine farklı şey olacaksa değiştirilebilir.
Kod:
n = 20

for i in range(1, n + 1):
    if i % 2 == 0:
        print(i)

Sonsuza kadar yazıyor çünkü while True sonsuza kadar çalışacak döngü demektir.
while True yazıp break kullanmanız saçmalık. O döngülerin amacı o değil. Yine de öyle olması gerektiğini varsayalım. if i == 20 kısmını i += 1'den önce koymalısınız. Diğer türlü zaten ilk if ile tek olan sayıları eliyorsunuz. print ile çift bir sayı yazdırılıyor. Sonra i += 1 deyip çift olan sayıyı tek yapıyorsunuz. Sonrasında tek olduğu kesin olan bir sayının 20'ye eşit olup olmadığına bakıyorsunuz.
 
while True ne demek biliyor musunuz?


Çözüm bu. 20 yerine farklı şey olacaksa değiştirilebilir.
Kod:
n = 20

for i in range(1, n + 1):
    if i % 2 == 0:
        print(i)

Sonsuza kadar yazıyor çünkü while True sonsuza kadar çalışacak döngü demektir.
Break koyduğu için bozulmasını bekliyor. 20'ye geldiğinde if çalışmadan i 21 olduğu için durmuyor arkadaş bunun farkında değil.

i 19ken 19 % 2 != 0 ? true olduğu için i 20 oluyor sonra bakıyor 20'yi yazdırıyor ardından 20'yi 21 yapıyor sonra 21'de durup durmayacağını kontrol ediyor. :D
 
En alttaki if komutunu while döngüsünün içindeki If'in içine koyup bir dener misinidüzeldi

while True ne demek biliyor musunuz?


Çözüm bu. 20 yerine farklı şey olacaksa değiştirilebilir.
Kod:
n = 20

for i in range(1, n + 1):
    if i % 2 == 0:
        print(i)

Sonsuza kadar yazıyor çünkü while True sonsuza kadar çalışacak döngü demektir.
while True yazıp break kullanmanız saçmalık. O döngülerin amacı o değil. Yine de öyle olması gerektiğini varsayalım. if i == 20 kısmını i += 1'den önce koymalısınız. Diğer türlü zaten ilk if ile tek olan sayıları eliyorsunuz. print ile çift bir sayı yazdırılıyor. Sonra i += 1 deyip çift olan sayıyı tek yapıyorsunuz. Sonrasında tek olduğu kesin olan bir sayının 20'ye eşit olup olmadığına bakıyorsunuz.
izlediğim videolarda aynı örneğin tek sayılı hali vardı bende kendimce çifte çevirmeye çalıştım saçma ise giriş seviyesinde çalışabileceğim daha mantıklı örneklerin olduğu bir yer önerir misiniz
 
izlediğim videolarda aynı örneğin tek sayılı hali vardı bende kendimce çifte çevirmeye çalıştım saçma ise giriş seviyesinde çalışabileceğim daha mantıklı örneklerin olduğu bir yer önerir misiniz
Bu kod çalışır ancak mantığında hata var. O yüzden olmuyor.

Aşama aşama açıklamaya çalışayım;
while True: sen döngüden çıkana kadar çalışacak demektir. Bu noktada döngüden çıkmak için break kullanman yada başka bir şekilde işlemi sonlandırman gerekiyor.
if i % 2 != 0: i'nin 2'ye bölümünden kalan 0 değilse devreye girecek ve bu if'in içerisinde yer alan i += 1 ve continue blokları çalışacak.

Şimdi continue dediğimiz şey loopun devamındaki şeylerin çalışmasını önler ve bir sonraki sefere geçiş yaptırır. Bu çalıştığında print ve diğer if çalışmayacak yani.

Eğer tekse print ve diğer if çalışmadan devam edecek. Buraya özellikle dikkatini vermen gerek.

Sayı 19 olduğunda i % 2 != 0 true döndürüyor çünkü 19'un 2'ye bölümünden kalan 1. Bu durumda i 20 oluyor, print ve diğer çalışmadan bir sonraki tura geçiyoruz. Sayı 20 iken false dönüyor ve program sonraki satıra devam ediyor. Önce ekrana 20 geliyor ardından 20 + 1 ile 21 oluyor sonrada if bloğu çalışıyor. Olanı fark ettin değil mi? if bloğu çalışmadan önce sayı 21 oldu. Dolayısıyla 20'deyken o if bloğu hiç çalışmadı. Bundan kaynaklı olarak da break hiç çalışmadı. Döngüyü durduracak if bloğunu i += 1'den önceye koyarsan sorun düzelecektir.
 
Bu kod çalışır ancak mantığında hata var. O yüzden olmuyor.

Aşama aşama açıklamaya çalışayım;
while True: sen döngüden çıkana kadar çalışacak demektir. Bu noktada döngüden çıkmak için break kullanman ya da başka bir şekilde işlemi sonlandırman gerekiyor.
if i % 2 != 0: I'nin 2'ye bölümünden kalan 0 değilse devreye girecek ve bu If'in içerisinde yer alan i += 1 ve continue blokları çalışacak.

Şimdi continue dediğimiz şey loopun devamındaki şeylerin çalışmasını önler ve bir sonraki sefere geçiş yaptırır. Bu çalıştığında print ve diğer if çalışmayacak yani.

Eğer tekse print ve diğer if çalışmadan devam edecek. Buraya özellikle dikkatini vermen gerek.

Sayı 19 olduğunda i % 2!= 0 true döndürüyor çünkü 19'un 2'ye bölümünden kalan 1. bu durumda i 20 oluyor, print ve diğer çalışmadan bir sonraki tura geçiyoruz. Sayı 20 iken false dönüyor ve program sonraki satıra devam ediyor. Önce ekrana 20 geliyor ardından 20 + 1 ile 21 oluyor sonra da if bloğu çalışıyor. Olanı fark ettin değil mi? İf bloğu çalışmadan önce sayı 21 oldu. Dolayısıyla 20'deyken o if bloğu hiç çalışmadı. Bundan kaynaklı olarak da break hiç çalışmadı. Döngüyü durduracak if bloğunu i += 1'den önceye koyarsan sorun düzelecektir.

Anladım çok teşekkür ederim.
 
while True sen döngüden çıkana kadar çalışacak demek değildir. Sonsuza kadar çalışacak demektir. Her döngüde break kullanılabilir, bu while True'ya özgü bir şey değil. Gidip firmalarda böyle kod yazarsanız sizi atarlar. Sonsuza kadar çalışan kod kimseye gerekmez çünkü.

İlla while döngüsü kullanacaksanız böyle yapın. Ama bu durumda while döngüsü kullanmak saçma. Kaç kere çalışacağı biliniyor. Rahatça for ile yazılabilir. For döngüsü özellikle Python'da daha hızlı.
Kod:
i = 1
while i <= 20:
    if i % 2 == 0:
        print(i)
    i += 1


Dilin temellerini öğreniyorsunuz. Birkaç örnek ile onlarca örnek arasında pek fark olduğunu düşünmüyorum. Eğitimdekiler iş görmeli. Tabii düzgün bir eğitim olduğunu varsayıyorum.
İlla soru yeri istiyorsanız LeetCode, Hackerrank, Project Euler gibi yerlere bakabilirsiniz.
 

Technopat Haberler

Geri
Yukarı