Ekrana 1'den 1000'e kadar yazman gerekse 1000 satır print mi yazardın? Programlamanın en büyük vaadi tam burada: tekrarı makine yapsın. while, koşul True olduğu sürece bloğunu tekrar tekrar çalıştırır — koşul bozulduğu an çark durur:
sayac = 0
while sayac < 15:
if sayac % 3 == 0:
print("Sayac değeri:", sayac)
sayac += 1
# çıktı: Sayac değeri: 0, 3, 6, 9, 12 (alt alta)
Üç parça hep aynı: başlangıç (sayac = 0), koşul (sayac < 15) ve döngü içinde ilerleme (sayac += 1).
sayac += 1 satırını unutursan koşul asla False olmaz — program kilitlenir, hiçbir şey yazmaz. while yazarken kendine sor: "bu koşulu False yapacak satır nerede?"while, kaç tur döneceğini bilmediğin işlerin ustasıdır. Müfredatın güzel örneği — basamak sökme (% 10 son basamağı verir, // 10 onu atar):
sayi = 1987
while sayi > 0:
print("Basamak:", sayi % 10)
sayi //= 10
# çıktı: Basamak: 7, 8, 9, 1 — sayı eriye eriye 0 olunca döngü biter
for ise tur sayısı belli olan işlerin döngüsüdür: elindeki koleksiyonun (birden çok değer taşıyan yapı) her elemanı için bloğu bir kez çalıştırır. Kutuları sırayla açan bir kurye gibi:
for sayi in [1, 6, 3, 7]:
print("Sıradaki değer:", sayi)
# çıktı:
# Sıradaki değer: 1
# Sıradaki değer: 6
# Sıradaki değer: 3
# Sıradaki değer: 7
Değişken ismini (sayi) sen seçersin; her turda sıradaki elemanı taşır. Sayaç yok, koşul yok — liste bitince döngü kendiliğinden durur. String de bir koleksiyondur, harf harf gezilir:
for harf in "Merhaba":
print(harf) # M, e, r, h, a, b, a alt alta
for. "Şu olana KADAR dön" belirsizliği varsa (kumbara dolana kadar, sayı 1 olana kadar) → while.for x in liste yazımındaki in kelimesinin bir de soru soran hali var: bir değer koleksiyonun içindeyse True, değilse False döner:
sepet = ["elma", "muz"]
print("muz" in sepet) # True
print("kivi" in sepet) # False
for harf in "Merhaba Dünya":
if harf in "aeıioöuüAEIİOÖUÜ":
print("Sesli harf:", harf) # e, a, a, ü, a
Koca bir arama döngüsünü tek kelimeye indirir — if "Ayşe" in sinif: okunuşuyla bile Türkçe gibi.
Liste (list), yan yana dizilmiş kutular gibidir: her kutunun 0'dan başlayan bir dizin (konum numarası) vardır ve içine her tipten değer koyabilirsin:
liste = [1, 2, 3, "Osman", True] # karışık tip sorun değil bos1 = [] bos2 = list() # ikisi de boş liste
Üç vazgeçilmez araç:
liste = ["a", "b"]
liste.append("c") # SONA ekler → ['a', 'b', 'c']
son = liste.pop() # sondakini ÇIKARIR ve verir → son = 'c'
ilk = liste.pop(0) # dizin verirsen oradakini alır → ilk = 'a'
print(len(liste)) # len = eleman sayısı → 1
Klasik ikili: boş liste aç, döngüyle doldur —
kareler = []
for sayi in [1, 2, 3, 4, 5]:
kareler.append(sayi ** 2)
print(kareler) # [1, 4, 9, 16, 25]
append listeyi yerinde değiştirir, geriye None döndürür. liste = liste.append(x) yazarsan listen yok olur! Doğrusu sadece liste.append(x). (pop ise tam tersi — çıkardığını döndürür, değişkende yakala.)"1'den 100'e kadar dön" demek için 100 elemanlı liste yazmazsın — range(başla, bit, adım) senin yerine üretir:
list(range(10)) # [0, 1, 2, ..., 9] tek sayı = 0'dan başlar list(range(5, 15)) # [5, 6, ..., 14] list(range(5, 25, 2)) # [5, 7, 9, ..., 23] adım 2 list(range(10, 0, -1)) # [10, 9, ..., 1] geriye sayar!
for i in range(1, 6):
print(i) # 1 2 3 4 5 alt alta
range(1, 10) 9'da durur — 10'u da istiyorsan range(1, 11) yazmalısın. "Son sayı eksik çıktı" hatası, döngü dünyasının bir numaralı klasiğidir.break (kır) döngüyü anında bitirir — kalan turlar hiç işletilmez. Aradığını bulunca durmasını istediğin aramalarda birebir:
for i in [10, 20, 25, 30]:
if i > 20:
break # 25'i görünce çark kırıldı
print(i)
# çıktı: 10 20
continue (devam et) ise sadece o turu atlar, döngü sonraki elemandan sürer — "bu elemanı eleme takılma, geç":
for i in range(10):
if i % 3 == 0:
continue # 0, 3, 6, 9 pas geçildi
print(i)
# çıktı: 1 2 4 5 7 8
Python'a özgü bir incelik: döngünün de else'i olur ve döngü break ile kırılmadan biterse çalışır. En parlak kullanımı arama — bulursan break, hiç bulamazsan else:
sayi = 17
for i in range(2, sayi):
if sayi % i == 0:
print(sayi, "asal değildir!")
break
else:
print(sayi, "asaldır.")
# çıktı: 17 asaldır. (hiç bölen çıkmadı → break çalışmadı → else çalıştı)
Bölen aramak, kaybolan anahtarı aramak gibidir: bulduğun an aramayı bırakırsın (break); bütün odalara bakıp bulamadıysan "yok" dersin (else). Bayrak değişkenine gerek kalmaz.
if'in değil for'un else'idir — for ile aynı hizada yazılır. while döngüsüne de aynı şekilde else eklenebilir."Boş liste aç, döngüyle doldur" o kadar yaygın ki Python ona kısayol vermiş — liste üreteci (list comprehension):
sayilar = [1, 2, 3, 4, 5] kareleri = [sayi ** 2 for sayi in sayilar] print(kareleri) # [1, 4, 9, 16, 25]
Okunuşu: "sayilar'daki her sayı için karesini listele". Sona if ekleyince süzgeçli üretim yaparsın:
sayilar = list(range(10)) ciftlerin_kareleri = [i ** 2 for i in sayilar if i % 2 == 0] print(ciftlerin_kareleri) # [0, 4, 16, 36, 64]
Bu tek satır, şu üç satırın birebir aynısıdır: boş liste + for + koşullu append. Üreteci okuyamadığın gün, kafanda uzun haline geri aç.
🎯 Döngü Alıştırmalarına Başla →