Döngü Nedir? For, While ve Do-While Mantığı
Döngü, bir kod bloğunu belirli bir koşul doğru kaldığı veya belirlenen tekrar sayısı tamamlandığı sürece çalıştıran programlama yapısıdır. Döngüyü doğru kurmak için başlangıç değerini, devam koşulunu ve her turdaki güncellemeyi birlikte tasarlamak gerekir; bu üç parçadan biri eksikse yanlış sonuç veya sonsuz döngü oluşabilir.
Bu yazıda (6)
- ›Bir döngünün dört adımda ilerlemesi: başlangıç, koşul, gövde, güncelleme
- ›For, while ve do-while seçimini probleme göre yapmak
- ›Dizilerde indeks sınırı: her elemanı dolaşırken nerede durulur?
- ›Break, continue ve iç içe döngülerde akış kontrolü
- ›Çözümlü örnekler: sayaçla yazdırma ve koşullu toplam
- ›Sık yapılan hatalar ve karıştırılan kavramlar
Döngü Nedir? For, While ve Do-While Mantığı
Bir programda aynı işlemi birkaç kez yapmak gerektiğinde kodu kopyalayıp çoğaltmak kısa vadede mümkün görünür; ancak tekrar sayısı 1000 olduğunda veya işlenecek veri miktarı sonradan değiştiğinde bu yaklaşım kullanışsızlaşır. Döngüler, aynı komut grubunu kontrollü biçimde yeniden çalıştırarak bu problemi çözer. Örneğin bir dizideki her sayıyı incelemek, 1’den 1000’e kadar sayıları yazdırmak ya da kullanıcı doğru veri girene kadar yeni giriş istemek döngüyle modellenebilir.
Döngü yalnızca “bir şeyi tekrar etmek” değildir. Programın hangi noktadan başlayacağı, ne zaman devam edeceği, her tekrarda hangi değerin değişeceği ve hangi durumda duracağı açıkça tanımlanır. Bu nedenle döngü konusu; algoritma kurma, koşul ifadelerini kullanma ve veri yapıları üzerinde işlem yapma becerileriyle doğrudan bağlantılıdır. Aşağıdaki anlatımda sözdizimi tek bir dile bağlı kalmadan temel mantığı açıklanacak, Python örnekleri ise bu mantığı görünür hâle getirmek için kullanılacaktır.
Bir döngünün dört adımda ilerlemesi: başlangıç, koşul, gövde, güncelleme
Kontrollü bir döngüyü anlamanın en pratik yolu, her turda gerçekleşen işlemleri sıraya koymaktır. Bu sıralama özellikle while ve benzeri ön-denetimli döngüler için geçerlidir. do-while yapısında gövde önce çalışır, koşul daha sonra kontrol edilir; for-each türü döngülerde ise başlangıç ve güncelleme her zaman açık bir sayaç ataması olarak yazılmaz:
- Başlangıç: Sayaç veya üzerinde işlem yapılacak konumu temsil eden değişkene ilk değer verilir. Örneğin
i = 1ifadesi sayacın 1’den başlayacağını belirtir. - Koşul kontrolü: Ön-denetimli döngülerde döngü gövdesi çalıştırılmadan önce koşul değerlendirilir. Koşul doğruysa gövdeye girilir; yanlışsa döngü atlanır veya sona erer. Bu nedenle
whiletüründe koşul başlangıçta yanlışsa gövde hiç çalışmayabilir.do-whileyapısında ise gövde önce çalışır, koşul kontrolü sonra yapılır. - Gövdenin çalışması: Tekrar edilmek istenen işlem yürütülür. Bu işlem ekrana yazdırma, toplama, karşılaştırma veya bir dizinin elemanını işleme olabilir.
- Güncelleme: Sayaç, indeks veya durumu belirleyen başka bir değişken değiştirilir.
i = i + 1gibi bir güncelleme yapılmazsa koşul aynı kalabilir ve döngü sonlanmayabilir.for-eachdöngülerinde bu adım, sonraki elemanın otomatik olarak alınması biçiminde gerçekleşebilir.
Örneğin i = 1 ile başlayıp i <= 5 koşulunu kullanan ve her turda i değerini 1 artıran bir döngüde gövde 1, 2, 3, 4 ve 5 değerleri için çalışır. i 6 olduğunda i <= 5 yanlış olur ve döngü biter. Buradaki önemli ayrım şudur: i < 5 kullanılsaydı 5 değeri işlenmezdi. Sınırın eşitlik içerip içermemesi, sonuçtaki tekrar sayısını doğrudan değiştirir.
Döngünün sonlanması için koşulun zaman içinde yanlış olmasına veya döngünün break gibi bir mekanizmayla sonlandırılmasına yol açan bir ilerleme bulunmalıdır. Sayaçlı döngülerde bu ilerleme genellikle her turdaki güncellemedir; ancak değer yalnızca bazı turlarda değişebilir veya koşulu etkileyen değişim döngü dışındaki bir etkenden gelebilir. Bu değişim sayacı artırmak kadar, listeden bir eleman tüketmek veya kullanıcıdan yeni giriş almak şeklinde de olabilir. Ancak kullanıcı girişi hatalı olduğu sürece tekrar eden bir yapı, kullanıcı hiç doğru değer vermezse teorik olarak sınırsız sayıda çalışabilir.
For, while ve do-while seçimini probleme göre yapmak
Döngü türü seçilirken temel soru, kullanılacak yapının probleme ve akışa hangisinin daha uygun olduğudur. for genellikle bir aralık, dizi, liste veya yineleyicinin elemanları üzerinde dolaşmak için; while ise bir koşul doğru kaldığı sürece çalışmak için tercih edilir. Tekrar sayısının bilinip bilinmemesi yalnızca yardımcı bir tasarım ölçütüdür.
For döngüsü, tekrar sayısı veya üzerinde dolaşılacak veri kümesi belirgin olduğunda kullanışlıdır. Bir dizinin tüm elemanlarını işlemek ya da 1’den 100’e kadar sayıları yazdırmak buna örnektir. Python’daki range(1, 6) ifadesi 1, 2, 3, 4 ve 5 değerlerini üretir; üst sınır olan 6 dâhil değildir:
for i in range(1, 6):
print(i)
Çıktı 1’den 5’e kadar olur. Bu örnekte başlangıç ve bitiş aralığı açık olduğu için for okunabilir bir seçimdir.
While döngüsü, tekrar sayısı önceden belirli değilken, bir koşul doğru olduğu sürece çalışır. Örneğin kullanıcıdan doğru parola gelene kadar giriş istemek veya bir işlem tamamlanana kadar beklemek while mantığına uygundur. Koşul döngünün başında kontrol edildiğinden, ilk kontrol yanlışsa gövde hiç yürütülmez.
Do-while döngüsü ise gövdeyi önce çalıştırıp koşulu sonra kontrol eder. Böylece gövdenin en az bir kez yürütülmesi garanti edilir. Kullanıcıdan en az bir kez seçim almak gereken menüler bu yapıya örnek olabilir. Ancak do-while her programlama dilinde aynı sözdizimiyle bulunmaz; Python’da doğrudan do-while anahtar sözcüğü yoktur. Python’da benzer davranış çoğunlukla while True ve uygun bir break kullanılarak kurulabilir.
Bu ayrım bir performans kuralı değil, probleme uygun model seçme kuralıdır. Tekrar sayısı biliniyorsa while da kullanılabilir; fakat başlangıç, koşul ve güncellemenin aynı yapıda görülmesi nedeniyle for daha anlaşılır olabilir. Buna karşılık koşulun ne zaman yanlış olacağı girişlere veya çalışma zamanındaki duruma bağlıysa while daha doğal bir seçimdir.
Dizilerde indeks sınırı: her elemanı dolaşırken nerede durulur?
Döngülerin en sık kullanım alanlarından biri dizi veya liste elemanlarını sırayla işlemektir. Örneğin [10, 20, 30, 40, 50] listesinin beş elemanı vardır. Python’da indeksler 0’dan başladığı için geçerli indeksler 0, 1, 2, 3 ve 4’tür. Bu durumda i <= 5 gibi bir koşul kullanmak hatalıdır; 5 numaralı indeks bulunmadığından sınır aşımı oluşur.
İki farklı dolaşım yaklaşımı vardır. İlki, elemanın kendisini doğrudan almaktır:
sayilar = [10, 20, 30, 40, 50]
toplam = 0
for sayi in sayilar:
toplam += sayi
print(toplam) # 150
İkincisi, indeks üzerinden ilerlemektir. Bu yaklaşım, elemanın konumuna da ihtiyaç duyulduğunda kullanılır:
sayilar = [10, 20, 30, 40, 50]
for i in range(len(sayilar)):
print(i, sayilar[i])
İlk örnekte beş elemanın tamamı işlenir ve toplam 150 bulunur. İkinci örnekte range(len(sayilar)), range(5) anlamına gelir ve 0’dan 4’e kadar indeksleri üretir. Buradan çıkarılacak karar kuralı şudur: yalnızca değerle çalışıyorsanız doğrudan eleman dolaşımı, konuma da ihtiyaç duyuyorsanız indeks dolaşımı tercih edilir.
Bir döngü içinde toplam hesaplanıyorsa başlangıç değeri de önemlidir. Toplam değişkeni genellikle 0 ile başlatılır; çünkü toplama işleminde etkisiz eleman 0’dır. Çarpım hesabında ise başlangıç değeri çoğu durumda 1 seçilir. Bu seçim, yapılan işlemin matematiksel yapısına bağlıdır ve her problemde aynı başlangıç değeri kullanılmaz.
Break, continue ve iç içe döngülerde akış kontrolü
Döngünün normal akışı, koşul yanlış olana kadar gövdenin çalışmasıdır. Bazı durumlarda bu akışı değiştirmek gerekir.
break, döngüyü bulunduğu noktada tamamen sonlandırır. Örneğin bir listede aranan ilk değeri bulduktan sonra kalan elemanları incelemeye gerek yoksa break kullanılabilir. Bu komut yalnızca içinde bulunduğu döngüden çıkar; iç içe döngülerde dış döngüyü kendiliğinden sonlandırmaz.
continue, mevcut turun geri kalanını atlar ve bir sonraki tura geçer. Örneğin negatif sayıları toplam dışında bırakmak için negatif değer görüldüğünde continue çalıştırılabilir. Fakat sayaç güncellemesi döngü gövdesinde ve continue komutundan sonra bulunuyorsa while döngüsünde sayaç güncellenmeden kalabilir. Bu da sonsuz döngü riskidir.
İç içe döngü, bir döngünün gövdesinde başka bir döngünün bulunmasıdır. 3 satır ve 4 sütunlu bir tabloyu dolaşmak için dış döngü satırları, iç döngü sütunları temsil edebilir. Böyle bir yapıda iç döngü her dış döngü turunda yeniden başlar. Dış döngü 3, iç döngü 4 kez çalışıyorsa gövdenin toplam yürütülme sayısı olur. Bu, iç içe döngülerde işlem sayısının neden hızlı artabildiğini gösteren basit bir hesaptır; gerçek süre, gövdenin yaptığı işlemlere ve kullanılan dile de bağlıdır.
İç içe döngü kullanmak otomatik olarak hatalı değildir. Ancak aynı veriyi gereksiz yere tekrar tekrar taramak işlem maliyetini artırabilir. Önce problemin gerçekten iki boyutlu bir tekrar gerektirip gerektirmediği kontrol edilmelidir.
Çözümlü örnekler: sayaçla yazdırma ve koşullu toplam
Örnek 1 — Belirli aralıktaki çift sayıları yazdırma
Verilenler: 1’den 10’a kadar olan sayılar incelenecek ve yalnızca çift olanlar yazdırılacaktır.
Çözüm adımları:
- İncelenecek aralık 1’den 10’a kadardır. Python’da üst sınırı da kapsamak için
range(1, 11)yazılır. - Her sayının çift olup olmadığını test etmek için kalan operatörü kullanılır:
sayi % 2 == 0. - Koşul doğruysa sayı yazdırılır. Koşul ifadesi hakkında daha fazla bilgi için koşul ifadeleri konusuna bakılabilir.
for sayi in range(1, 11):
if sayi % 2 == 0:
print(sayi)
İzleme:
- 1 için kalan 1’dir, yazdırılmaz.
- 2 için kalan 0’dır, yazdırılır.
- 3 için kalan 1’dir, yazdırılmaz.
- Aynı karar 10’a kadar sürdürülür.
Sonuç: Ekrana 2, 4, 6, 8, 10 değerleri yazdırılır. Buradaki döngü tekrar sayısı 10’dur; if ise her turda hangi sayıların sonuçta yer alacağını belirler. Yani döngü tekrarı, koşullu seçme işlemiyle aynı kavram değildir.
Örnek 2 — Listedeki sayıların toplamını bulma
Verilenler: sayilar = [10, 20, 30, 40, 50].
Çözüm adımları:
- Toplam değişkeni
0olarak başlatılır. - Döngü listedeki her elemanı sırayla
sayideğişkenine aktarır. - Her turda
toplamdeğeritoplam + sayişeklinde güncellenir. - Liste bittiğinde döngü sona erer.
sayilar = [10, 20, 30, 40, 50]
toplam = 0
for sayi in sayilar:
toplam = toplam + sayi
print(toplam)
Ara sonuçlar:
- Başlangıç:
toplam = 0 - 10 işlendiğinde:
10 - 20 işlendiğinde:
30 - 30 işlendiğinde:
60 - 40 işlendiğinde:
100 - 50 işlendiğinde:
150
Sonuç: Program 150 yazdırır. Burada döngü, listedeki eleman sayısı kadar yani 5 kez çalışır. Listenin uzunluğu değişirse kodun kendisini tekrar yazmak gerekmez; döngü yeni eleman sayısına göre ilerler. Bu örnek, döngü ile dizi ve veri yapısı konularının neden birlikte öğrenildiğini gösterir.
Sık yapılan hatalar ve karıştırılan kavramlar
Sonsuz döngü: while koşulunu etkileyen değişken güncellenmezse koşul doğru kalabilir. Örneğin i = 1 atanıp while i <= 5: yazıldığı hâlde gövde içinde i += 1 bulunmazsa döngü 1 değerinde takılır. Kullanıcıdan giriş alan döngülerde de kullanıcı doğru değeri hiç vermezse tekrar sayısı önceden sınırlı olmayabilir. Gerekirse deneme sayısına bir üst sınır eklenmelidir.
Off-by-one, yani bir eksik veya bir fazla tekrar: i < 5 ile i <= 5 aynı değildir. İlki 5’i dışarıda bırakır, ikincisi 5’i içerir. Python range fonksiyonunda üst sınırın dahil edilmemesi de bu hatanın yaygın nedenlerindendir. Sınır değerleri küçük bir örnek üzerinde elle listelemek, hatayı erken yakalamaya yardımcı olur.
For ve if’i aynı sanmak: for tekrarın kaç kez veya hangi veri üzerinde yapılacağını yönetir; if ise o turda bir koşula bağlı olarak hangi komutların çalışacağını belirler. Örnek 1’de for 10 sayıyı incelerken if yalnızca çiftleri seçmiştir.
Break ile continue’ı karıştırmak: break döngüyü bitirir, continue yalnızca mevcut turun kalanını atlar. Bu nedenle aranan ilk elemanda durmak için break, belirli elemanları işlem dışı bırakıp devam etmek için continue düşünülür.
Do-while’ın her dilde bulunduğunu varsaymak: Döngü türlerinin adı ve yazımı programlama diline göre değişebilir. Bir dilde bulunan do-while yapısının başka bir dilde doğrudan karşılığı olmayabilir. Sözdiziminden önce “koşul ne zaman kontrol ediliyor?” sorusu cevaplanmalıdır.
Döngünün her zaman performansı artıracağını düşünmek: Döngü, tekrar eden kodu daha yönetilebilir kılar; fakat çok büyük veri üzerinde gereksiz iç içe döngüler veya pahalı işlemler kullanılırsa çalışma süresi artabilir. Bu nedenle döngü sayısı kadar gövde içindeki işlemler de incelenmelidir.
Sınav ipucu: TYT/AYT düzeyinde algoritma veya akış sorularında önce başlangıç değerini, sonra koşulun ilk kontrolde doğru olup olmadığını ve son olarak güncellemenin hangi sırada yapıldığını yazın. Her turdaki değişken değerlerini küçük bir tabloya geçirmek, özellikle break, continue ve eşitlik içeren koşullarda sonucu tahmin etmekten daha güvenlidir.
Belirli bir aralıkta eşit adımlarla ilerleyen bir sayaç için tekrar sayısı, sınırların dahil edilip edilmemesine göre hesaplanır. Örneğin 1’den 10’a kadar ve 1’er artan bir döngüde tekrar sayısı 10’dur. İç içe iki döngüde dış döngü , iç döngü kez çalışıyorsa ve her dış turunda iç döngü baştan yürütülüyorsa gövde yaklaşık kez çalışır. Bu çarpım, yalnızca her iki döngünün de tüm turlarını tamamladığı basit durum için doğrudan kullanılabilir; break, continue veya değişken koşullar sonucu değiştirebilir.
Bir kargo merkezinde 5 paketin etiketlendiğini düşünün. Görevli her turda sıradaki bir paketi alır, etiketini kontrol eder ve işler; paket sayısı kadar tekrar tamamlanınca durur. Paket sayısı önceden biliniyorsa bu süreç for mantığına, etiket hatalı olduğu sürece aynı paketi düzeltmeye devam etmek ise koşula bağlı while mantığına benzer. Gerçek bir kargo sistemi yazılımının tam olarak bu yapıyı kullandığı iddia edilmez; örnek yalnızca başlangıç, işlem, güncelleme ve durma adımlarını somutlaştırır.
TYT/AYT'de doğrudan programlama dili sözdizimi yerine algoritma akışı, sayaç takibi veya koşul yorumlama sorusu gelirse şu sırayı uygulayın: başlangıç değerini yazın, koşulu ilk kez kontrol edin, gövdeyi çalıştırın, güncellemeyi uygulayın ve yeniden kontrol edin. range gibi yapılarda üst sınırın dahil olup olmadığını ayrıca kontrol edin. for tekrar düzenini, if ise o turdaki seçimi belirler; bu ikisini aynı işlevde düşünmeyin.
Sık sorulan sorular
Döngü kullanmak neden kodu kısaltır?
Aynı komutları her tekrar için ayrı ayrı yazmak yerine kod bloğu bir kez tanımlanır ve döngü tarafından yeniden yürütülür. Bu, özellikle veri sayısı değişebilen problemlerde kod tekrarını azaltır; ancak döngü kullanılmasının tek amacı karakter sayısını düşürmek değildir. Okunabilirlik, bakım ve doğru sınır yönetimi de önemlidir.
While döngüsü hiç çalışmayabilir mi?
Evet. while koşulu gövdeye girilmeden önce kontrol edildiği için başlangıçta yanlışsa döngü gövdesi sıfır kez çalışır. En az bir çalışmanın gerekli olduğu durumda do-while mantığı veya dile uygun eşdeğer bir yapı değerlendirilmelidir.
Döngünün kaç kez çalışacağını nasıl bulurum?
Başlangıç değerini, bitiş koşulunu ve güncelleme miktarını sırayla inceleyin. i < 5 ile i <= 5 arasındaki farkı kontrol edin; ayrıca kullanılan dilde aralık üst sınırının dahil olup olmadığını öğrenin. Koşullu while döngülerinde tekrar sayısı kullanıcı girdisine veya çalışma zamanındaki duruma bağlı olabilir.
Sonsuz döngü her zaman programı kilitler mi?
Sonsuz döngü sonlanma koşuluna ulaşmadığı için programın ilgili akışı sürekli çalışır; bunun kullanıcıya donma gibi yansıması, döngünün yaptığı işe ve programın geri kalanına bağlıdır. Uzun süren her döngü sonsuz değildir. Sonlanma koşulu ve değişken güncellemesi incelenerek ayrım yapılmalıdır.
Döngü ile koşul ifadesi arasındaki fark nedir?
if bir koşulu kontrol eder ve uygun dalı genellikle o akışta seçer. Döngü ise bir kod bloğunun birden fazla turda yürütülmesini sağlar. Bir döngünün içinde if bulunabilir; bu durumda döngü tekrarları yönetir, if ise her turda uygulanacak kararı verir.
- •Döngü Nedir?vektorelbilisim.com
- •Döngü Nedir? Ne İşe Yarar?techcareer.net
- •Döngü Nedir? Tekrar Yapıları ile Kodlama Mantığıaykutakman.com