🐍 class-666

📖 Ders 3 — Karar Verme

Programın yol ayrımları: if, elif, else. Bitince 🟢 Kolay alıştırmalardan başla.

1. if: programın yol ayrımı

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

Girinti süs değildir! Başka dillerde bloklar parantezle işaretlenir; Python'da girintiyle. Girintisiz yazarsan IndentationError (girinti hatası); yanlış hizalarsan program çalışır ama anlamı değişir. Bloktaki tüm satırlar aynı hizada olmalı.

2. else: "değilse"

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

3. elif: "değilse şuna bak"

İ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)
Sıralama tuzağı: geniş koşulu başa yazarsan dar koşullara sıra gelmez!
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.
Zincirin gizli hediyesi: bir 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.

4. Koşullarda operatörler

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
Python'a özel şıklık — zincirli karşılaştırma: if 1 < x < 10: = "x, 1 ile 10 arasında mı?" (1 < x and x < 10 ile aynı, ama matematikteki gibi okunur).

5. Kısa yapı (tek satır if/else)

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.

6. İç içe kararlar

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")
Çoğu iç içe if, 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ç.

7. Sık Yapılan Hatalar

HataBelirtisiÇözüm
Bloğu girintisiz yazmakIndentationError: expected an indented blockif'ten sonraki satırlar 4 boşluk içeride olmalı
: unutmakSyntaxError, ok işareti satır sonunu gösteririf, elif, else satırları HEP : ile biter
Geniş koşulu başa yazmakHata yok ama bazı dallar hiç çalışmıyorDar/özel koşul üste, geniş koşul alta
Koşulda tek =SyntaxError: invalid syntaxSoru soruyorsun: if x == 5: (çift eşittir)
Satırı yanlış hizaya koymakHata yok ama satır her zaman (veya hiç) çalışıyorSatır if'e aitse girintili, değilse if hizasında olmalı
En sinsi hata sonuncusu — çünkü Python şikayet etmez:
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.

8. Kendini Sına

Kağıt kalem bile gerekmez — kafanda çalıştır:

1) x = 0 iken if x: bloğu çalışır mı? — cevabı gör

Çalışmazbool(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.

2) puan = 90 iken şu zincir ne yazar: if puan >= 50: print("geçer") / elif puan >= 90: print("takdir") — cevabı gör

geç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ı.

3) a, b = 4, 4 iken print("eşit" if a == b else "farklı") ne yazar? — cevabı gör

eşita == b → True olduğundan kısa yapı soldaki değeri seçer. Dikkat: buradaki == çift eşittir; tek = yazılsaydı sözdizimi hatası olurdu.