? Okuma Hesaplanıyor... Okuma: %0
0

Bir Program Aynı Şeyi Nasıl "Bıkmadan" Yapar? (Python 4.ders)

Resim
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
açıklayabilecek duruma gelecektir.


📌 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)
Bu, 5 sayı için katlanılabilir. Peki ya 1'den 1000'e kadar yazdırman gerekseydi ya da 1'den bir milyona kadar? Elle yazmak burada tamamen çekilmez bir hâle gelir. Üstelik sayıyı önceden bilmediğin durumlar da var, mesela  "kullanıcı doğru şifreyi girene kadar sor"  gibi bir işlem, kaç kere tekrarlanacağı  baştan belli olmayan  bir tekrardır.
İş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.
Bu ayrım, tıpkı "5 tur koş" (belli sayı, "for" a benzer) ile "yorulana kadar koş" (belirsiz süre, "while" a benzer) arasındaki fark gibidir.

Resim
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

"range(1, 6)" aslında ne yapıyor? Bu, 1'den başlayıp 6'ya kadar (6 hariç) giden bir sayı dizisi üretir. Neden 6 dahil değil de hariç? Çünkü Python'da "range(a, b)" ifadesi "b - a" kadar eleman üretir mantığıyla tasarlanmıştır bu, ileride liste dilimlemede karşımıza çıkacak "başlangıç dahil, bitiş hariç" kuralının ilk örneğidir.
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ır


4.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

Burada Python her turda önce sayac <= 5 koşulunu kontrol eder. True ise döngü içindeki kod çalışır, False olduğu anda döngü durur.
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ı?"

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.


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

"sayi == 3" olduğunda "continue" devreye girer, "print(sayi)" satırı o tur için atlanır, ama döngü 4 ve 5 için devam eder.

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.

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".
Bu ayrım rastgele değildir hangi bilgiye sahip olduğuna (kesin sayı mı, belirsiz bir koşul mu) göre doğru aracı seçmek, döngülerin özünü anlamak demektir.


📝 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ı: 55

Cevap 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.

Konuyu Dinle
Hazır. Konuyu dinlemek için Oynat'a basın.

Yazarımız Hasan hakkında: Adım Hasan, ama bir dönem MyBB kullananlar beni Yondaime nicki ile tanırdı. 2009 da başladı web maceram, MyBB, Wordpress, Matematik, Adalet, Bilgisayar Programcılığı, derken şimdide burada bir şeyler yapmaya çalışıyorum :)

user avatar


 

Yazıya herhangi bir yorum yapılmadı

[-]
Hızlı Cevap
Güvenlik Kodu:
Lütfen, resmin üzerindeki harf ve rakamlardan oluşan Güvenlik Kodunu, aşağıdaki metin kutusuna giriniz.
Güvenlik Kodu:
(Büyük/Küçük harf duyarsız)


 
Reklam
Reklam


Kategoriler


Yasal Uyarı
Bu internet sitesi içeriğinde yer alan tüm yazılar Gidenler.Me’ye ait olup, 5846 sayılı Fikir ve Sanat Eserleri Kanunu ve 5237 sayılı Türk Ceza Kanunu kapsamında korunmaktadır. Bu hakları ihlal eden kişiler, 5846 sayılı Fikir ve Sanat eserleri Kanunu ve 5237 sayılı Türk Ceza Kanununda yer alan hukuki ve cezai yaptırımlara tabi olurlar. Gidenler.Me, ilgili yasal işlem başlatma hakkına sahiptir. Gidenler.Me Blog'da yer alan tüm yazılar/makaleler bilgi edinme amacı ile sınırlı olup Gidenler.Me'den izin alınmaksızın değiştirilemez, çoğaltılamaz, yayımlanamaz, dağıtılamaz, umuma iletilemez, başka bir lisana çevrilemez.


Türkçe Çeviri: MyBB, Yazılım: MyBB, © 2002-2026 MyBB Group.
GM v3.0.0.8 Beta theme designed for MyBB