Bir Koşulu İzleyen Döngü
for bilinen bir dizi üzerinde iterasyon yaparken, while bir koşul doğru olduğu sürece döngüye devam eder. Kaç iterasyon gerekeceğini önceden bilmediğinde ona başvurursun — bir şey çalışana kadar tekrar denemek, kullanıcı dur diyene kadar girdi okumak, bir servis yanıt verene kadar yoklamak.
Biçimi basittir:
Bu 0'dan 4'e kadar yazdırır. Python her iterasyonun başında koşulu kontrol eder. Koşul doğruysa gövde çalışır. Sonra tekrar kontrol eder. Koşul yanlış olduğunda döngü biter.
count += 1 satırının önemli olduğuna dikkat et. O olmasa koşul sonsuza dek doğru kalır — sonsuz bir döngü. while ile asıl tuzak budur ve kullanabildiğin yerde for'u tercih etmenin başlıca sebebi de budur.
while Hangi Durumda Doğru Araçtır
Birkaç klasik kullanım durumu:
Başarana kadar tekrar dene.
Kullanıcı çıkana kadar girdi oku.
Bir kuyruğu işle.
Ortak nokta: elemanlar üzerinde iterasyon yapmak yerine bir durum değişikliğini izliyorsun.
while True Sorun Değil
Bu kalıbı sıkça göreceksin:
"Gerçek" çıkış koşulu, başta test edebileceğin temiz bir şey değil de döngü gövdesinin içinde olduğunda bu deyimsel (idiomatic) Python'dır. Bir yerde güncellediğin, başka bir yerde kontrol ettiğin should_continue bayrağı uydurmaktan daha kolay okunur.
Tek kural: kodun eninde sonunda ulaşacağı bir break (veya return ya da fırlatılan bir istisna) olduğundan emin ol. Çıkış yolu olmayan koşulsuz bir while True:, bir programı kilitlemenin klasik yoludur.
Sonsuz Döngüden Kaçınmak
Sonsuz döngüler, koşul sonsuza dek doğru kaldığında oluşur. Her zamanki şüpheliler:
- Değişkeni güncellemeyi unuttun.
while count < 5:gövdesinin içindecount'u değiştiren bir şey olmalı. - Yanlış değişkeni güncelledin.
while i < 10:ve içeridej += 1— birkaç değişkenden fazlası varsa kaçırması kolay. - Kayan noktalı sayı karşılaştırması.
while x != 1.0:, eğerx1.0'a yalnızca yaklaşıyorsa sonsuza dek dönebilir. Bunun yerine<=veyaabs(x - 1.0) < tolerancekullan.
Terminalde sonsuz bir döngüye takılırsan Ctrl+C'ye bas. Bu bir kesme sinyali gönderir ve Python ne yapıyorsa bırakır.
break, continue ve else
while, for ile aynı üç "akış" aracını destekler:
breakdöngüden hemen çıkar.continuebir sonraki iterasyona atlar (koşul yeniden kontrol edilir).elsedöngü birbreakolmadan bittiğinde çalışır.
Bu, ilkel bir asallık kontrolüdür. İçteki break tetiklenirse sayı bileşiktir. Döngü doğal yollarla (koşul false olarak) çıkarsa else çalışır ve sayıyı asal ilan eder.
while mi for mu: Hangisini Seçmeli?
Hızlı bir zihinsel test:
- Adım adım dolaşacağın bir koleksiyonun var mı? →
for. - Sabit sayıda iterasyon yapman mı gerekiyor? →
for i in range(n):. - Bir koşul değişene kadar mı dönüyorsun? →
while.
Erken dönem Python kodunda döngülerin %90'ını for karşılar. while daha çok yoklama, tekrar deneme ya da basit bir REPL oluşturma gibi şeylerde ortaya çıkar. Bir listeyi index ile dolaşmak için while kullanıyorsan, bu for + enumerate'e geçmen gerektiğinin bir işaretidir.
Pratik Bir while Programı
Sayı tahmin oyunu klasik bir örnektir çünkü iterasyon sayısı kullanıcının nasıl oynadığına bağlıdır:
Kaç deneme süreceğini önceden bilemezsin — kullanıcının tahminlerine bağlıdır. while'ın varlık sebebi de tam budur.
İleriye Bakış
Artık Python'un sunduğu iki döngü türünü de gördün. Sırada: range() ayrıntılı olarak — sayma tarzı neredeyse her for döngüsünde karşına çıkar ve koleksiyonlara geçmeden önce küçük nüanslarını anlamaya değer.
Sıkça Sorulan Sorular
for döngüsü yerine ne zaman while kullanmalıyım?
Kaç iterasyon olacağını önceden bilmediğinde while kullan — örneğin bir şey başarılı olana kadar tekrar denemek ya da kullanıcı 'quit' yazana kadar girdi okumak. Bilinen bir koleksiyon üzerinde adım adım ilerliyorsan for kullan.
Python'da sonsuz döngüden nasıl kaçınırım?
Döngünün içinde bir şeyin eninde sonunda koşulu false yaptığından emin ol. Sonsuz döngülerin en yaygın sebebi, koşulun bağlı olduğu değişkeni güncellemeyi unutmaktır. Bir sonsuz döngüye yakalanırsan, durdurmak için terminalde Ctrl+C'ye bas.
while True kötü bir uygulama mı?
while True kötü bir uygulama mı?Doğası gereği değil. İçinde net bir break olan while True:, "belirli bir çıkış koşuluna ulaşana kadar döngüye devam et" için gayet normal bir kalıptır. İki farklı yerde yönetmen gereken bir boolean bayrak uydurmaktan daha temizdir.