Python'da Koşul Yazma: if, elif, else ve İç İçe Koşullar
Programınızın bir koşula göre farklı yollar izlemesini if, elif ve else ile nasıl yazacağınızı, karşılaştırma ve mantıksal operatörleri ve iç içe koşulları nasıl sadeleştireceğinizi öğrenirsiniz.
Bir bakışta
- if koşul doğruysa bloğu çalıştırır. Koşuldan sonra iki nokta üst üste ve girintili bir blok gelir.
- elif ve else, ek yollar tanımlar. Python belgelerine göre elif parçası sıfır ya da daha çok olabilir, else isteğe bağlıdır.
- Zincirde ilk doğru koşulun bloğu çalışır, kalanlar atlanır. Bu yüzden koşulların sırası sonucu belirler.
- Eşitlik == ile sorgulanır, = ile değer atanır. Bu karışıklık başlangıçta en sık görülen hatalardan biridir.
- İç içe koşullar erken çıkışla sadeleşir. Uygunsuz durumu önce eleyip asıl işi en dış düzeyde yazmak okunurluğu artırır.
if ile ilk koşul
if, bir koşulu değerlendirir ve doğruysa altındaki girintili bloğu çalıştırır. Koşul yanlışsa blok atlanır. Satır sonundaki iki nokta üst üste ve bloğun girintisi sözdiziminin parçasıdır; unutulursa hata alırsınız.
if puan >= gecme_notu: print('Geçtiniz')
Burada puan gecme_notu değerine eşit ya da ondan büyükse ekrana mesaj yazılır, değilse program sessizce devam eder. Koşul bir karşılaştırma olabilir ama bir değişkenin kendisi ya da bir fonksiyon sonucu da olabilir.
Karşılaştırma operatörleri şunlardır: eşit (==), eşit değil (!=), küçük (<), büyük (>), küçük eşit (<=) ve büyük eşit (>=). Üyeliği in ile, nesne kimliğini is ile sorgularsınız. Boş bir liste, boş metin, sıfır ve None Python'da yanlış sayılır; içi dolu olanlar doğru sayılır. Bu yüzden bir listenin boş olup olmadığını şöyle yazabilirsiniz:
if liste: print('Liste dolu')
else ve elif ile çok yollu karar
Koşul yanlış olduğunda başka bir blok çalışsın istiyorsanız else eklersiniz. Üç ya da daha çok yol gerekiyorsa araya elif girer.
if puan >= yuksek_esik: harf = 'A' elif puan >= orta_esik: harf = 'B' elif puan >= gecme_notu: harf = 'C' else: harf = 'Kaldı'
Python belgelerinin ifadesiyle elif parçası sıfır ya da daha çok olabilir, else parçası isteğe bağlıdır. elif, else if sözcüklerinin kısaltmasıdır ve fazla girinti oluşmasını önler. if, elif zinciri, başka dillerdeki switch ya da case yapılarının yerine kullanılır.
Zincirin işleyişini bilmek önemlidir: koşullar yukarıdan aşağıya sırayla denenir, ilk doğru olanın bloğu çalışır ve kalan koşullar hiç değerlendirilmez. Yukarıdaki örnekte orta_esik koşulunu yuksek_esik'in önüne yazsaydınız en yüksek puan bile B alırdı. Bu yüzden koşulları en özelden en genele doğru sıralayın.
Yol sayısına göre uygun koşul yapısı değişir
- Koşul doğruysa bir şey yapılacak, değilse hiçbir şeyyalnız ifEn basit yapı.
- Doğruysa bir iş, yanlışsa başka bir işif ve elseTam olarak iki yol vardır.
- Birden çok koşul, hangisi doğruysa o işif, elif ve elseSıra önemlidir; ilk doğru koşul çalışır.
- Tek bir değer birçok sabitle karşılaştırılıyormatch yapısıPython belgeleri bu amaç için match ifadesini de anar.
and, or ve not ile birleşik koşullar
Birden çok koşulu tek bir karar içinde birleştirmek için and, or ve not kullanılır. and ile iki koşulun ikisinin de doğru olması gerekir; or ile en az birinin doğru olması yeter; not ise sonucu tersine çevirir.
if yas_uygun and belge_tam: print('Başvuru kabul edildi')
if not belge_tam: print('Eksik belge var')
Karmaşık birleşik koşulları parantezle gruplayın ve gerekirse ayrı değişkenlere açın:
basvuru_uygun = yas_uygun and belge_tam if basvuru_uygun: print('Kabul')
Böylece koşul bir isim kazanır ve okuyan kişi neyin sorgulandığını hemen anlar. Aralık sorgusu için Python zincirleme karşılaştırmaya izin verir: alt_sinir <= deger <= ust_sinir. Bu, iki ayrı koşulu and ile bağlamaktan daha okunaklıdır.
Metin karşılaştırmasında büyük küçük harf farkı önemlidir. Kullanıcıdan gelen yanıtı karşılaştırmadan önce küçük harfe çevirip baştaki ve sondaki boşlukları temizlemek, beklenmedik sonuçları önler.
and ve or soldan sağa değerlendirilir ve sonuç belli olduğu anda durur. Bu davranış, sıralama doğruysa ek güvenlik sağlar:
if liste and liste[indeks] == aranan: print('Bulundu')
Liste boşsa ilk koşul yanlış olduğu için ikinci koşul hiç değerlendirilmez ve indeks hatası oluşmaz. Koşulları yazarken ucuz ve güvenli kontrolü başa koymak bu yüzden iyi bir alışkanlıktır.
İç içe koşullar ve erken çıkış
Koşulun içine başka bir koşul yazmak mümkündür, ancak her seviye girintiyi artırır ve okunurluğu azaltır. İç içe birkaç koşul genellikle sadeleştirilebilir.
Bir yol, koşulları and ile birleştirmektir. Diğer yol, fonksiyon içinde olumsuz durumları başta eleyip döndürmektir; buna erken çıkış denir:
def ode(hesap, tutar): if not hesap.aktif: return 'Hesap kapalı' if hesap.bakiye < tutar: return 'Bakiye yetersiz' hesap.bakiye -= tutar return 'Ödeme alındı'
Bu yapıda uygunsuz durumlar sırayla elenir ve asıl iş en dış düzeyde, girintisiz yazılır. Aynı mantığı iç içe if bloklarıyla yazarsanız asıl işlem iki ya da daha çok seviye girintiye kayar.
Kural olarak, bir koşul bloğu kendi içinde başka bir koşul bloğu açıyorsa duraksayın; birleştirilebilir mi, ayrı fonksiyona bölünebilir mi ya da erken çıkış mümkün mü diye sorun.
Tek satırlık koşul ve match
Bir koşula göre iki değerden birini seçmek için tek satırlık yazım kullanılabilir:
durum = 'aktif' if oturum_acik else 'pasif'
Bu ifade oturum_acik doğruysa 'aktif', değilse 'pasif' değerini atar. Kısa ve net seçimlerde okunaklıdır; ancak iç içe tek satırlık koşul yazmak zordur, o durumda normal if blokları tercih edin.
Bir değeri birçok sabitle karşılaştırıyorsanız match ifadesi de vardır. Python belgeleri bu ifadeyi bir değeri birkaç sabitle karşılaştırmak ya da tür denetlemek için tanıtır. Basit durumlarda if ve elif zinciri de aynı işi görür; match yapısı Python'un güncel sürümlerinde bulunur, bu yüzden kullanacağınız sürümde desteklendiğini kontrol edin.
Koşul yazarken daima en yaygın hatayı hatırlayın: tek eşittir atama, çift eşittir karşılaştırmadır. if deger = bir_sey yazarsanız Python sözdizimi hatası verir.
Sık yapılan hatalar
- = ile == karıştırmak: karşılaştırma için çift eşittir kullanılır.
- Girintiyi karıştırmak: blok yanlış satırlara uygulanır ya da hata verir.
- elif sıralamasını yanlış kurmak: genel koşul özelden önce yazılırsa özel yollara hiç ulaşılmaz.
- None kontrolünde == yerine is kullanmamak: bu durumda is None kalıbı tercih edilir.
- Her şeyi iç içe yazmak: erken çıkış ya da and ile sadeleştirilebilecek bloklar okunurluğu düşürür.
- Metin karşılaştırmasında büyük küçük harfi unutmak: kullanıcı girdisini önce normalleştirin.
- Ondalıklı sayıları == ile karşılaştırmak: küçük yuvarlama farkları eşitliği bozabilir, aralık denetimi daha güvenlidir.
Bu beceriyi Mindset programlarında nerede çalışırsınız
Python ile Programlama Eğitimi, Fonksiyonlar ve Operatörler modülünde karşılaştırma ve mantıksal operatörleri, koşul akışını da kapsayan bir sırayla işler. Veri temizleme, otomasyon betiği ya da basit iş kuralları yazmak isteyen analist ve yeni geliştiriciler için koşul yapıları, programın karar verebilmesinin ilk basamağıdır.
İlgili Mindset programı
Python ile Programlama Eğitimi
Sık sorulan sorular
elif ile iç içe if arasındaki fark nedir?
elif aynı seviyede alternatif koşullar tanımlar ve ilk doğru olanda durur. İç içe if ise bir koşul doğruysa içeride ikinci bir koşul daha sorgular. Seçenekler birbirinin alternatifiyse elif, bir koşul diğerinin ön şartıysa iç içe if ya da and kullanılır.
Python'da switch case var mı?
Python belgeleri if, elif zincirinin başka dillerdeki switch ve case yapılarının yerine kullanıldığını söyler. Güncel sürümlerde bir değeri birkaç sabitle karşılaştırmak için match ifadesi de bulunur; ancak kullandığınız sürümde desteklenip desteklenmediğini kontrol etmek gerekir.
Boş liste if içinde neden yanlış sayılır?
Python'da boş koleksiyonlar, boş metin, sıfır ve None koşul bağlamında yanlış değerlendirilir. Bu yüzden if liste yazmak listenin dolu olup olmadığını sorgular. Okunurluk açısından açıklık istiyorsanız uzunluğu açıkça da kontrol edebilirsiniz; ikisi de kabul edilen yazımlardır.
== ile is arasındaki fark nedir?
== iki değerin eşit olup olmadığını sorgular. is ise iki değişkenin aynı nesneye işaret edip etmediğini sorgular. None ile karşılaştırırken is None kullanılır; sayı ve metin karşılaştırmasında == kullanılır, çünkü eşit değerler farklı nesneler olabilir.
Tek satırlık if else ne zaman kullanılmalı?
Bir değişkene iki değerden birini atarken ve koşul kısa olduğunda kullanın. İç içe ya da uzun koşullarda normal if bloğu daha okunaklıdır; kısa yazım uğruna anlaşılırlığı feda etmeyin. Başka biri kodu okurken koşulu bir bakışta anlayabilmelidir.
İlgili rehberler
Kategori: Yazılım Geliştirme