Şimdiye kadar yazdığın kod dümdüz bir yoldu — her satır sırayla çalıştı. if yola bir çatal koyar: tabelada bir koşul yazar, koşul True ise o yola girilir, False ise yol hiç kullanılmadan geçilir. İki sözdizimi kuralı var — koşuldan sonra iki nokta :, yolun satırları girintili (4 boşluk içeriden):
sayi = 10
if sayi > 5:
print("beşten büyük") # 4 boşluk içeride = if'e ait
print("bitti") # girintisiz = yol ayrımının DIŞINDA
# çıktı:
# beşten büyük
# bitti ← bu satır koşuldan bağımsız, her zaman çalışır
sayi = 3 olsaydı çıktı sadece bitti olurdu — girintili satır atlanır, yol birleştikten sonraki satırlar normal devam eder.
IndentationError (girinti hatası); yanlış hizalarsan program çalışır ama anlamı değişir. Bloktaki tüm satırlar aynı hizada olmalı.Çatalın öbür yolu. Koşul tutmayanlar için ayrı bir güzergah:
yas = 16
if yas >= 18:
print("reşit")
else:
print("reşit değil")
# çıktı: reşit değil (16 >= 18 → False, else yolu çalıştı)
else koşul almaz — "yukarıdaki olmadıysa" demektir. if ile aynı hizaya yazılır, onun da : ve girintili bloğu vardır. İki yoldan her zaman tam biri çalışır: ikisi birden asla, hiçbiri asla.
İkiden çok ihtimal için araya istediğin kadar elif (else + if kısaltması) girer. Python tabelaları yukarıdan aşağı okur; İLK doğru dalı çalıştırır ve zinciri terk eder — gerisine bakmaz bile:
sayi = -4
if sayi > 0:
print("pozitif")
elif sayi < 0:
print("negatif")
else:
print("sıfır")
# çıktı: negatif (ilk koşul False, ikincisi True → orada durdu)
puan = 95
if puan >= 50:
print("geçer") # 95 de buraya düşer!
elif puan >= 90:
print("takdir") # ASLA çalışmaz — ölü kod
Dar/özel koşul her zaman üste: önce >= 90, sonra >= 50. Not sistemleri hep yüksekten alçağa dizilir.elif'e gelindiyse üstündekiler kesin False'tur. elif puan >= 70: satırına gelen puan zaten 90'dan küçüktür — and puan < 90 yazmana gerek yok.2. dersteki her şey if'in tabelasında hayat bulur — karşılaştırmalar, %, and/or, truthy/falsy:
gun = 3
if gun >= 1 and gun <= 5: # and/or ile birleşik koşul
print("hafta içi") # çıktı: hafta içi
sayi = 8
if sayi % 2 == 0: # % ile bölünebilirlik
print("çift") # çıktı: çift
isim = ""
if isim: # truthy: isim doluysa True
print(f"Merhaba {isim}")
else:
print("Merhaba misafir") # çıktı: Merhaba misafir
if 1 < x < 10: = "x, 1 ile 10 arasında mı?" (1 < x and x < 10 ile aynı, ama matematikteki gibi okunur).Amaç sadece koşula göre değer seçmekse blok kurmana gerek yok — tek satır yeter:
a, b = 3, 8 mutlak_fark = a - b if a > b else b - a print(mutlak_fark) # 5 puan = 45 durum = "geçti" if puan >= 50 else "kaldı" print(durum) # kaldı
Okunuşu: "koşul doğruysa soldaki, değilse sağdaki". 1. dersten tanıdığın yapı bu — artık nereden geldiğini biliyorsun. Kural: değer seçiyorsan kısa yapı, iş yapıyorsan (print, atama zinciri, hesap dizisi) normal blok.
Bir yolun içinde yeni bir çatal açılabilir — bir bloğun içine yeni if koyarsın, girinti bir kademe daha artar:
uye, puan = True, 150
if uye:
if puan > 100:
print("altın üye") # çıktı: altın üye
else:
print("standart üye")
else:
print("üye değil")
and/or ile teke iner: if uye and puan > 100: — daha kısa ve çoğu zaman daha okunak. Ama her dala farklı davranış gerekiyorsa (üyeye başka, puanlıya başka mesaj) iç içe yapı doğru araçtır. Hangisi okunaksa onu seç.| Hata | Belirtisi | Çözüm |
|---|---|---|
| Bloğu girintisiz yazmak | IndentationError: expected an indented block | if'ten sonraki satırlar 4 boşluk içeride olmalı |
: unutmak | SyntaxError, ok işareti satır sonunu gösterir | if, elif, else satırları HEP : ile biter |
| Geniş koşulu başa yazmak | Hata yok ama bazı dallar hiç çalışmıyor | Dar/özel koşul üste, geniş koşul alta |
Koşulda tek = | SyntaxError: invalid syntax | Soru soruyorsun: if x == 5: (çift eşittir) |
| Satırı yanlış hizaya koymak | Hata yok ama satır her zaman (veya hiç) çalışıyor | Satır if'e aitse girintili, değilse if hizasında olmalı |
if kosul:
print("A")
print("B") # if'e ait: koşul False ise YAZILMAZ
if kosul:
print("A")
print("B") # if'in DIŞINDA: HER ZAMAN yazılır!
İki kod arasındaki tek fark bir satırın hizası — ama davranış bambaşka. "Neden bu satır hep çalışıyor?" diye sorarsan önce girintiye bak.Kağıt kalem bile gerekmez — kafanda çalıştır:
x = 0 iken if x: bloğu çalışır mı? — cevabı görÇalışmaz — bool(0) False'tur (1. dersin doluluk kuralı). if x: "x truthy mi?" diye sorar; sıfır falsy'dir. Sıfırı da yakalamak istiyorsan if x == 0: diye açıkça sormalısın.
puan = 90 iken şu zincir ne yazar: if puan >= 50: print("geçer") / elif puan >= 90: print("takdir") — cevabı görgeçer — 90 ≥ 50 doğru olduğu için Python ilk dalda durur; elif puan >= 90 doğru olmasına rağmen ona hiç bakılmaz. Takdir yazdırmak için dar koşul (>= 90) başa alınmalı.
a, b = 4, 4 iken print("eşit" if a == b else "farklı") ne yazar? — cevabı göreşit — a == b → True olduğundan kısa yapı soldaki değeri seçer. Dikkat: buradaki == çift eşittir; tek = yazılsaydı sözdizimi hatası olurdu.