
BÖLÜM 4 — Tekrarın Doğuşu: Bir Program Aynı Şeyi Nasıl "Bıkmadan" Yapar?
Bu bölümün temel sorusu: Bir işlemi 5 kere değil de 1000 kere yapman gerekseydi, her seferinde aynı kodu elle mi yazardın? Bilgisayar tekrar eden işleri nasıl "bıkmadan" yapar?🎯 Bölümün Öğrenme Hedefleri
Bu bölümün sonunda öğrenci;- programların neden tekrar (iterasyon) mekanizmasına ihtiyaç duyduğunu,
- "for" döngüsü ile "while" döngüsü arasındaki temel felsefe farkını,
- "range()" fonksiyonunun aslında ne ürettiğini,
- sonsuz döngülerin nasıl oluştuğunu ve neden tehlikeli olduğunu,
- "break" ve "continue" ifadelerinin döngü akışını nasıl değiştirdiğini,
- iç içe döngülerin ne zaman gerekli olduğunu
📌 Geçen Derste Neler Öğrendik?
Üçüncü derste koşullu ifadelerle ("if / elif / else") programın bir duruma göre farklı yollar seçmesini sağladık. Ama şu ana kadarki hiçbir kodumuz tekrar etmedi, her satır en fazla bir kere çalıştı. Bu derste programın aynı işlemi defalarca, hiç yorulmadan yapmasını sağlıyoruz.4.1. Her Şey Bir Sorunla Başladı
Diyelim ki 1'den 5'e kadar sayıları ekrana yazdırmak istiyorsun. Şu ana kadar ki derslerdeki bilgimizle şöyle yapardık:Kod:
print(1)
print(2)
print(3)
print(4)
print(5)İşte tam olarak bu iki farklı problem "belli sayıda tekrar(for)" ve "bir koşul sağlanana kadar tekrar(while)" Python'da iki farklı döngü türünün doğmasına neden olur.
4.2. Büyük Fikir: Bir Kod Bloğunu "Sar" ve Tekrar Çalıştır
Döngü, temelde şunu yapar: bir kod bloğunu alır, belirli bir kurala göre onu defalarca çalıştırır. Python'da bu iki şekilde yapılır:- "for" döngüsü: "Bu listedeki/aralıktaki her eleman için bunu(saydır,yazdır,ekleme...) yap". Yani önceden bilinen bir tekrar sayısı ya da küme üzerinde çalışır.
- "while" döngüsü: "Şu koşul doğru olduğu sürece şunu yap" yani tekrar sayısı baştan belli olmayan bir duruma bağlı tekrarlar için kullanılır.

4.3. "for" Döngüsü: Bilinen Bir Kümeyi Gezmek
Kaynak kod
Kod:
for sayi in range(1, 6):
print(sayi)Çıktı
1
2
3
4
5
Kod:
print(list(range(1, 6))) # [1, 2, 3, 4, 5]
print(list(range(5))) # [0, 1, 2, 3, 4] -- tek parametre verilirse 0'dan başlar
print(list(range(0, 10, 2))) # [0, 2, 4, 6, 8] -- üçüncü parametre adım (step) miktarıdır4.4. "for" Döngüsü Sadece Sayılarla mı Çalışır?
Hayır "for" döngüsünün asıl gücü, herhangi bir gezilebilir (iterable) şey üzerinde çalışabilmesidir. Örneğin bir string'in her karakterini tek tek gezebiliriz:Kaynak kod
Kod:
for harf in "Python":
print(harf)Çıktı
P
y
t
h
o
n
BİLGİ
"for" döngüsü aslında "sayılar üzerinde dönen" bir yapı değil, "bir kümenin elemanlarını tek tek ele alan" bir yapıdır. "range()" bunlardan sadece biridir. İlerleyen derslerde listeler, sözlükler gibi başka kümeler üzerinde de aynı mantıkla döneceğiz.
4.5. "while" Döngüsü: Bir Koşul Sağlandığı Sürece
Kaynak kod
Kod:
sayac = 1
while sayac <= 5:
print(sayac)
sayac = sayac + 1Çıktı
1
2
3
4
5
DİKKAT
sayac = sayac + 1 satırını unutursan ne olur? Koşul asla False olmaz, çünkü sayac hiç değişmez. Bu durumda program sonsuz döngüye girer ve asla durmaz:
Kod:
sayac = 1
while sayac <= 5:
print(sayac)
# sayac = sayac + 1 -- bu satır unutulduğunda sonsuz döngü oluşur!DERSTE
🤔 Neden Bu Hata Bu Kadar Yaygın?
Çünkü "while" döngüsünde, "for" un aksine, "ne zaman duracağı" Python tarafından otomatik garanti edilmez, bu sorumluluk tamamen programcıya aittir. Bu yüzden her "while" döngüsü yazarken kendinize şunu sormalısınız: "Bu koşul bir noktada gerçekten False olacak mı?"
Çünkü "while" döngüsünde, "for" un aksine, "ne zaman duracağı" Python tarafından otomatik garanti edilmez, bu sorumluluk tamamen programcıya aittir. Bu yüzden her "while" döngüsü yazarken kendinize şunu sormalısınız: "Bu koşul bir noktada gerçekten False olacak mı?"
4.6. Peki Hangi Durumda "for", Hangi Durumda "while" ?
Bu, yeni başlayanların sıkça kararsız kaldığı bir noktadır. Basit bir kural:- Kaç kere tekrar edeceğini önceden biliyorsan (bir liste kadar, 10 kere, bir yazının(string'in) uzunluğu kadar) → for
- Kaç kere tekrar edeceği bir duruma/olaya bağlıysa (kullanıcı doğru şifreyi girene kadar, bir oyun bitene kadar) → while
for: "5 kere" önceden bilinen bir sayı
Kod:
for i in range(5):
print("Merhaba")while: kullanıcı ne zaman doğru cevap vereceği bilinmiyor
Kod:
sifre = ""
while sifre != "1234":
sifre = input("Şifreyi gir: ")4.7. "break": Döngüyü Zorla Durdurmak
Bazen bir koşul oluştuğunda koşulun kendi doğal sonuna gelmesini beklemeden döngüyü tamamen sonlandırmak isteriz:Kaynak kod
Kod:
for sayi in range(1, 100):
if sayi == 5:
break
print(sayi)Çıktı
1
2
3
4
Python "sayi == 5" olduğu anda `break` ile döngüden tamamen çıkar, geri kalan 6-99 arasındaki sayılara hiç bakmaz.
DERSTE
🤔 5'i neden ekrana yazdırmadı?
Python sıralı komutları takip eder bunu daha önceden söylemiştik. "break", "print()" den önce geldiğinden ekrana yazdırmadı. 5 koşulunu eşitliğini gördü ve durdu.
Python sıralı komutları takip eder bunu daha önceden söylemiştik. "break", "print()" den önce geldiğinden ekrana yazdırmadı. 5 koşulunu eşitliğini gördü ve durdu.
4.8. "continue": Sadece Bu Turu Atlamak
"break" döngüyü tamamen bitirirken, "continue" sadece o anki turu atlar, döngü devam eder:Kaynak kod
Kod:
for sayi in range(1, 6):
if sayi == 3:
continue
print(sayi)Çıktı
1
2
4
5
BİLGİ
🤔 "break" ile "continue" Arasındaki Fark Neden Karıştırılır?
İkisi de bir koşula bağlı olarak "normal akışı böler" ama etkileri taban tabana zıttır: "break" = "artık yeter, tamamen çık." "continue" = "bu turu geç, ama devam et." Bunu ayırt etmenin en kolay yolu: "break" ten sonra döngü biter, "continue" den sonra döngü bir sonraki elemanla devam eder.
İkisi de bir koşula bağlı olarak "normal akışı böler" ama etkileri taban tabana zıttır: "break" = "artık yeter, tamamen çık." "continue" = "bu turu geç, ama devam et." Bunu ayırt etmenin en kolay yolu: "break" ten sonra döngü biter, "continue" den sonra döngü bir sonraki elemanla devam eder.
4.9. İç İçe Döngüler (Nested Loops)
Tıpkı iç içe koşullar gibi, döngüler de iç içe yazılabilir örneğin bir çarpım tablosu oluştururken:Kaynak kod
Kod:
for i in range(1, 4):
for j in range(1, 4):
print(i, "x", j, "=", i * j)Çıktı
1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
BİLGİ
💡 Büyük Fikir: Dış döngü her bir adım attığında, iç döngü baştan sona tamamen çalışır. Yani 'i = 1' iken 'j' önce 1, sonra 2, sonra 3 olur; ancak 'j' tükendiğinde dış döngü 'i = 2' ye geçer ve iç döngü yine baştan başlar. Bu, bir saatin akrep-yelkovan mantığına benzer; yelkovan (iç döngü) bir tur atmadan akrep (dış döngü) ilerlemez.
⚠️ Kavram Yanılgıları
❌ Yanlış düşünce: " 'for' döngüsü sadece sayılar üzerinde çalışır."✅ Daha doğru düşünce: 'for' döngüsü, 'range()' dahil olmak üzere string, liste, sözlük gibi "gezilebilir" (iterable) her şey üzerinde çalışabilir. 'range()' sadece bunlardan biridir.
❌ Yanlış düşünce: " 'while' döngüsü 'for' dan daha güçsüz ya da eskidir, mümkünse hep 'for' kullanılmalı."
✅ Daha doğru düşünce: İkisi farklı problemleri çözer. Tekrar sayısı bir duruma bağlıysa (belirsizse) 'while' daha doğal bir çözümdür; zorla 'for' a çevirmek kodu gereksiz karmaşıklaştırır.
❌ Yanlış düşünce: " 'continue' döngüyü durdurur, 'break' gibi çalışır."
✅ Daha doğru düşünce: 'continue' sadece o anki turu atlar ve döngü bir sonraki elemanla devam eder; döngüyü tamamen bitiren 'break' tir.
👨🏫 Öğretmen Notu
Döngüler anlatılırken önce "for" ile başlanması pedagojik açıdan doğrudur, çünkü "for" da "ne zaman duracağı" Python tarafından garanti edilir, öğrenci sonsuz döngü riskiyle daha az karşılaşır. Önerilen sıra:- Önce "aynı kodu elle tekrar yazma" sorununun zorluğu ve hata olasılığı(sayılı eksik yazma) somut bir örnekle (1'den 1000'e kadar yazdırma) gösterilir.
- "for" ve "range()" tanıtılır, "range(a, b)" nin neden b'yi hariç tuttuğu ayrıca vurgulanır.
- "for" un sadece sayılarla değil, string gibi kümelerle de çalıştığı gösterilerek "gezilebilir" kavramı erken tanıtılır.
- "while" tanıtılırken sonsuz döngü riski özellikle vurgulanır ve öğrenciye her "while" yazdığında "bu bir noktada gerçekten duracak mı?" diye sorması öğütlenir.
- "break" / "continue" en son, somut bir arama/filtreleme örneğiyle pekiştirilir.
✍️ Uygulama Soruları ve Cevapları
Soru 1: 1'den 10'a kadar olan sayıların toplamını bulan kodu "for" döngüsüyle yazınız.Soru 2: Aşağıdaki kod neden sonsuz döngüye girer?
Kod:
x = 0
while x < 5:
print(x)Soru 3: 1'den 20'ye kadar olan sayılardan sadece çift olanları yazdıran kodu yaz ("continue" kullanarak).
Soru 4: Bir listede (şimdilik "range" ile simüle edelim) 7 sayısını bulduğunda döngüyü tamamen durduran kodu yaz.
Soru 5: Aşağıdaki iç içe döngünün çıktısı kaç satırdan oluşur?
Kod:
for i in range(3):
for j in range(4):
print(i, j)📌 Şu Ana Kadar Neler Öğrendik?
- Döngülerin, tekrar eden işlemlerini tek tek elle yazma sorununun nasıl çözdüğü
- "for" döngüsünün önceden bilinen bir küme/sayı üzerinde, "while" döngüsünün ise bir koşula bağlı olarak çalıştığı
- "range()" fonksiyonunun başlangıç dahil, bitiş hariç bir sayı dizisi ürettiği
- "for" un sayılar dışında string gibi "gezilebilir(text)" yapılarla da çalıştığı
- Sonsuz döngülerin nasıl oluştuğu ve neden tehlikeli olduğu
- "break" (döngüyü tamamen durdurma) ile "continue" (sadece o turu atlama) arasındaki fark
- İç içe döngülerin nasıl çalıştığı (dış döngü bir adım, iç döngü baştan sona)
📌 Bu Bölümden Çıkarılacak En Önemli Sonuç
Döngüler bir formülle değil, "aynı şeyi elle tekrar tekrar yazma" sorunundan doğdu. Python bu ihtiyacı iki farklı araçla karşılar:- tekrar sayısı biliniyorsa "for",
- bir koşula bağlıysa "while".
📝 Bölümün Kısa Özeti
Döngüler, bir kod bloğunu tekrar tekrar çalıştırmamızı sağlar. "for" döngüsü, önceden bilinen bir küme (sayı aralığı, string, liste vb.) üzerinde çalışır; "range()" bu kümelerden biridir ve başlangıç dahil, bitiş hariç bir sayı dizisi üretir. "while" döngüsü ise bir koşul doğru olduğu sürece çalışır ve koşulun bir noktada "False" olmasını garanti etmek programcının sorumluluğundadır, aksi hâlde sonsuz döngü oluşur. "break" döngüyü tamamen durdurur, "continue" sadece o anki turu atlar. Döngüler iç içe de yazılabilir; dış döngü bir adım attığında iç döngü baştan sona tamamen çalışır.✍️ Uygulama Cevapları
Cevap 1:Kod:
toplam = 0
for sayi in range(1, 11):
toplam = toplam + sayi
print(toplam)
# Çıktı: 55Cevap 2:
Çünkü döngü içinde "x" değeri hiç değiştirilmiyor. "x < 5" koşulu her zaman "True" kalır, döngü asla duramaz. Düzeltmek için döngü içine "x = x + 1" gibi bir satır eklenmelidir.
Cevap 3:
Kod:
for sayi in range(1, 21):
if sayi % 2 != 0:
continue
print(sayi)Cevap 4:
Kod:
for sayi in range(1, 100):
if sayi == 7:
print("7 bulundu, duruluyor")
break
print(sayi)Cevap 5:
12 satırdır. Çünkü dış döngü 3 kere ('i': 0,1,2), her seferinde iç döngü 4 kere ('j': 0,1,2,3) çalışır — 3 x 4 = 12.
Bir Program Aynı Şeyi Nasıl "Bıkmadan" Yapar? (Python 4.ders)
