Şu ana kadar yazdığın programlar hep aynı sırayla, tepeden aşağı çalıştı: bir satır bitti, bir sonrakine geçti. Ama gerçek programlar böyle çalışmaz. Bir kullanıcı doğru şifreyi mi girdi, yoksa yanlış mı? Not ortalaması geçme sınırının üstünde mi, altında mı? İşte bu noktada devreye koşullu ifadeler girer: programa “eğer şu doğruysa bunu yap, değilse başka bir şey yap” diyebilme yeteneği. Python’da bunu if, elif ve else anahtar kelimeleriyle yaparız.
Neden Koşullu İfadelere İhtiyacımız Var?
Bir önceki yazıda öğrendiğin karşılaştırma operatörleri (==, >, < gibi) tek başına bir True ya da False değeri üretir. Koşullu ifadeler, bu değeri alıp programın akışını yönlendirir. Yani karşılaştırma “soruyu sorar”, koşullu ifade ise “cevaba göre ne yapılacağına karar verir”.
if Deyimi: Temel Kullanım
En basit hâliyle if, bir koşul True ise altındaki kod bloğunu çalıştırır. Python’da bu blok, süslü parantez {} ile değil, girinti (indentation) ile belirlenir — genellikle 4 boşluk.
yas = 20
if yas >= 18:
print("Reşitsin, ehliyet başvurusu yapabilirsin.")
Satırın sonundaki iki nokta üst üste (:) ve bir sonraki satırın girintili olması zorunludur; ikisinden biri eksikse Python hata verir. Koşul False olursa, if bloğundaki kod hiç çalışmaz ve program bir sonraki satıra devam eder.
else ile Alternatif Yol
else, koşul False olduğunda ne yapılacağını belirtir. Yani “if bu değilse, o zaman şunu yap”:
yas = 15
if yas >= 18:
print("Reşitsin.")
else:
print("Henüz reşit değilsin.")
Burada iki yoldan sadece biri çalışır — asla ikisi birden, asla hiçbiri değil. if–else çifti her zaman tüm ihtimalleri ikiye böler.
elif ile Birden Fazla Seçenek
İkiden fazla durumu ayırt etmen gerektiğinde elif (else if’in kısaltması) devreye girer. Python koşulları yukarıdan aşağıya sırayla kontrol eder ve ilk doğru olan bloğu çalıştırıp geri kalanları atlar:
puan = 72
if puan >= 90:
print("Harika!")
elif puan >= 70:
print("İyi iş.")
elif puan >= 50:
print("Geçtin, ama çalışmaya devam et.")
else:
print("Bu sefer olmadı.")
puan 72 olduğu için Python önce puan >= 90‘ı kontrol eder (yanlış), sonra puan >= 70‘i kontrol eder (doğru) ve “İyi iş.” yazdırıp geri kalan tüm elif/else bloklarını atlar — puan >= 50 de doğru olsa bile hiç kontrol edilmez. Sıralama bu yüzden önemlidir: koşulları her zaman en dar/özel olandan en geniş olana doğru yazmalısın.
Koşullarda Karşılaştırma ve Mantıksal Operatörlerin Birleşimi
Operatörler yazısında öğrendiğin and, or ve not ifadeleri, koşulları birleştirmek için tam burada işe yarar:
yas = 25
ehliyeti_var = True
if yas >= 18 and ehliyeti_var:
print("Araç kullanabilirsin.")
else:
print("Araç kullanamazsın.")
Bu örnekte hem yaşın 18’den büyük/eşit olması hem de ehliyetin olması gerekiyor; and her iki koşulun da True olmasını şart koşuyor. or kullansaydık, ikisinden sadece birinin doğru olması yeterli olurdu.
İç İçe (Nested) if Yapıları
Bir if bloğunun içine başka bir if yazmak da mümkündür. Ancak dikkat: iç içe yapılar hızla okunması zor hâle gelebilir, bu yüzden mümkünse and ile tek satırda birleştirmeyi tercih et.
yas = 25
ehliyeti_var = True
if yas >= 18:
if ehliyeti_var:
print("Araç kullanabilirsin.")
else:
print("Önce ehliyet almalısın.")
else:
print("Henüz yaşın uygun değil.")
Burada iç içteki if ehliyeti_var: satırı, sadece dıştaki yas >= 18 koşulu doğruysa hiç kontrol edilir. Girinti seviyesi, hangi kodun hangi koşula ait olduğunu belirler.
Yaygın Hatalar ve Çözümleri
- İki nokta üst üsteyi unutmak:
if yas >= 18satırının sonunda:yoksa PythonSyntaxErrorverir. Herif,elifveelsesatırı mutlaka:ile bitmelidir. - Girinti hatası:
ifbloğundaki satırların girintisi tutarsızsa (bazısı 4 boşluk, bazısı 2) PythonIndentationErrorfırlatır. Aynı blok içindeki tüm satırlar aynı girintiye sahip olmalı. - = ile == karıştırmak:
if yas = 18:yazmak hataya yol açar; atama=ile, karşılaştırma==ile yapılır. Python bu hatayı genelde açık birSyntaxErrorile bildirir. - elif sırasını yanlış kurmak: Geniş bir koşulu (
puan >= 0gibi) en başa yazarsan, altındaki tüm daha özel koşullar asla çalışmaz. Her zaman en özelden en genele doğru sırala. - Gereksiz else zincirleri: Her
if‘ten sonra ayrı birifyazmak yerine (ki bu tüm koşulları tek tek kontrol eder), birbirini dışlayan durumlardaelifkullanmak hem daha hızlı hem daha okunaklıdır.
Özet
if bir koşulu kontrol eder, elif ona alternatif koşullar ekler, else ise geriye kalan her şeyi yakalar. Python bu blokları yukarıdan aşağıya sırayla değerlendirir ve ilk doğru koşulda durur. Girinti burada süslü parantezlerin yerini alır, bu yüzden tutarlı ve doğru girinti kullanmak Python’da opsiyonel değil, zorunludur. Bir sonraki yazıda bu mantığı bir adım öteye taşıyıp aynı kodu defalarca çalıştırmamızı sağlayan for döngüsünü ve range() fonksiyonunu öğreneceğiz.
Şimdi Sen Dene: Not Ortalamasından Harf Notu Hesaplayan Program
Bir öğrencinin not ortalamasını alıp harf notuna çeviren bir program yaz. Kuralları önce kendin belirle, sonra aşağıdaki örnek çözümle karşılaştır.
Alıştırma: Harf Notu Hesaplayıcı (çözmeyi dene, sonra tıkla)
Aşağıdaki kurallara göre bir ortalama değişkeni tanımla ve harf notunu ekrana yazdır:
- 90 ve üzeri → AA
- 80–89 arası → BA
- 70–79 arası → BB
- 60–69 arası → CB
- 50–59 arası → CC
- 50’nin altı → FF
Örnek çözüm:
ortalama = 84
if ortalama >= 90:
harf_notu = "AA"
elif ortalama >= 80:
harf_notu = "BA"
elif ortalama >= 70:
harf_notu = "BB"
elif ortalama >= 60:
harf_notu = "CB"
elif ortalama >= 50:
harf_notu = "CC"
else:
harf_notu = "FF"
print(f"Ortalaman {ortalama}, harf notun: {harf_notu}")
Bonus: Kullanıcıdan input() ile ortalamayı al ve float() ile sayıya çevirerek programı etkileşimli hâle getir. İpucu: bir önceki yazıda öğrendiğin tip dönüşümünü hatırla.
Kendini Test Et: Çıktıyı Tahmin Et
Aşağıdaki kod parçalarının çıktısını çalıştırmadan önce tahmin etmeye çalış, sonra cevabı kontrol et.
Soru 1: Aşağıdaki kodun çıktısı ne olur?
sayi = 15
if sayi > 20:
print("Büyük")
elif sayi > 10:
print("Orta")
else:
print("Küçük")
Cevap: Orta. Python önce sayi > 20‘yi kontrol eder (15 > 20 yanlış), sonra sayi > 10‘u kontrol eder (15 > 10 doğru) ve bu bloğu çalıştırıp durur.
Soru 2: sifre = “1234” iken aşağıdaki kod ne yazdırır?
sifre = "1234"
if sifre == "1234":
print("Giriş başarılı")
elif sifre = "0000":
print("Varsayılan şifre")
Cevap: Bu kod hiçbir şey yazdırmaz — SyntaxError ile çöker. elif sifre = "0000": satırında karşılaştırma yerine atama operatörü (=) kullanılmış; doğrusu == olmalıydı.
Soru 3: Aşağıdaki kodun çıktısı ne olur?
x = 5
y = 10
if x > 0 and y > 0:
print("İkisi de pozitif")
elif x > 0 or y > 0:
print("En az biri pozitif")
else:
print("İkisi de pozitif değil")
Cevap: İkisi de pozitif. Hem x > 0 (5 > 0) hem de y > 0 (10 > 0) doğru olduğu için and ile birleşen ilk koşul True olur ve program ilk bloğu çalıştırıp durur — ikinci koşul hiç kontrol edilmez.
Soru 4: Aşağıdaki kod çalıştırıldığında ne olur?
yas = 20
if yas >= 18:
print("Reşitsin.")
Cevap: IndentationError hatası alırsın. if satırından sonraki print satırı girintili değil; Python, koşulun altında hangi kodun çalışacağını girintiden anlar, girinti yoksa hata verir.
Soru 5: puan = 65 iken aşağıdaki kodun çıktısı ne olur?
puan = 65
if puan >= 0:
print("Geçersiz olmayan bir puan")
elif puan >= 50:
print("Geçti")
else:
print("Kaldı")
Cevap: Geçersiz olmayan bir puan. İlk koşul puan >= 0 çok geniş tutulduğu için 65 dahil hemen hemen her sayı için doğru olur ve alttaki elif puan >= 50 satırına asla sıra gelmez. Bu, yazıda bahsedilen “elif sırasını yanlış kurmak” hatasının canlı bir örneğidir — koşullar en özelden en genele sıralanmalıydı.



