İçeriğe geç

Menü

Berk Akademi
Yorumlar Google yorumları Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

Python if Koşulunda and ve or Nasıl Kullanılır? Örneklerle

python-if-kosulunda-and-ve-or-nasil-kullanilir
Bu yazıda neler var?
  1. and ve or Bir if İçinde Ne İş Yapar?
  2. and, or ve not Doğruluk Tablosu ve Öncelik Sırası
  3. Parantez Sonucu Nasıl Değiştirir?
  4. Kısa Devre Değerlendirmesi: Sağ Taraf Her Zaman Çalışmaz
  5. Sık Yapılan Hatalar: x == 1 or 2, a > 5 and < 10 ve and ile or Karışıklığı
  6. Not ve Devam Bilgisine Göre Karar Veren Küçük Program
  7. Koşulunu Kendi Başına Kontrol Etmenin Dört Adımı
  8. Sık Sorulan Sorular

Python if koşulunda and ve or, birden fazla karşılaştırmayı tek bir koşulda birleştirmeni sağlar. and kullandığında if bloğunun çalışması için bütün koşulların doğru olması gerekir. or kullandığında koşullardan en az birinin doğru olması yeterlidir. Aynı ifadede ikisini birlikte kullanıyorsan sonucu Python'un öncelik sırasına bırakmak yerine parantezle açıkça belirtmek daha güvenlidir.

and ve or Bir if İçinde Ne İş Yapar?

Karşılaştırma operatörleri tek bir soruya doğru ya da yanlış cevabı verir: == eşit mi, != eşit değil mi, < küçük mü, > büyük mü, <= küçük ya da eşit mi, >= büyük ya da eşit mi. Her biri True ya da False üretir. Mantıksal operatörler ise bu sonuçları birbirine bağlar: and ve or iki karşılaştırmayı tek bir koşul hâline getirir.

Aynı koşulu üç dilde yazmak

Karmaşık bir koşulu doğrudan koda dökmek yerine üç adımda ilerleyebilirsin: önce cümle, sonra mantıksal ifade, en son Python kodu. Örnek bir kural şöyle olsun:

  • Doğal dil: Yaşın 18 ya da daha büyük olması VE kimlik kartının bulunması gerekiyor.
  • Mantıksal ifade: A and B (A: yaş 18 veya üzeri, B: kimlik var)
  • Python: yas >= 18 and kimlik_var

Cümledeki "VE" kelimesi koda and olarak, "YA DA" kelimesi or olarak geçer. Kuralı önce Türkçe cümleyle yazmak, hangi bağlacı seçeceğini netleştirir.

yas = 20
kimlik_var = True

if yas >= 18 and kimlik_var:
    print("Giriş serbest")
else:
    print("Giriş yok")

print(yas >= 18 or kimlik_var)

Beklenen çıktı:

Giriş serbest
True

Burada yas >= 18 ifadesi True, kimlik_var de True olduğu için and sonucu True çıkar ve if bloğu çalışır. Son satırdaki or ise iki taraftan biri doğru olduğu için zaten True verir. kimlik_var gibi doğrudan bir doğru/yanlış değeri taşıyan değişkeni == True ile karşılaştırmana gerek yoktur.

Önerilen kontrol sırası

Yeni bir koşul yazarken şu sırayı deneyebilirsin: önce kuralı cümleyle yaz, sonra her parçanın o anki değerini (yas >= 18 için True, kimlik_var için True gibi) bir kâğıda not et, en son kodu yazıp çıktıyla karşılaştır. Çıktı beklediğinle uyuşmuyorsa hata genellikle cümleyle kod arasındaki bağlaçta ya da parçalardan birinin değerindedir.

and, or ve not Doğruluk Tablosu ve Öncelik Sırası

and, or ve not Doğruluk Tablosu ve Öncelik Sırası

İki koşulun (A ve B) alabileceği dört değer kombinasyonu için üç operatörün sonucu aşağıdaki gibidir:

ABA and BA or Bnot A
TrueTrueTrueTrueFalse
TrueFalseFalseTrueFalse
FalseTrueFalseTrueTrue
FalseFalseFalseFalseTrue

Tabloyu cümleye çevirirsen:

  • A and B: "A doğru, üstelik B de doğru." Yalnız ilk satırda True çıkar.
  • A or B: "A doğru ya da B doğru (ya da ikisi birden)." Yalnız son satırda False çıkar.
  • not A: "A'nın tersi." True ise False, False ise True olur.

Hangi operatör önce çalışır?

Python, parantez yoksa operatörleri belirli bir sırayla değerlendirir. Mantıksal operatörlerde sıra şöyledir: önce not, sonra and, en son or. Bu sıra Python'un resmî dokümantasyonundaki operatör önceliği tablosuyla da uyumludur. Karşılaştırmalar (==, < gibi) bu üçünden de önce çözülür; bu yüzden yas >= 18 and kimlik_var ifadesinde karşılaştırma ayrıca parantez istemez.

sonuc = True or False and False
print(sonuc)

print(not False and False)

Beklenen çıktı:

True
False

İlk ifade şöyle çözülür: and önce çalışır, False and False sonucu False olur. Geriye True or False kalır ve sonuç True çıkar. İkinci ifadede not en başta çalışır: not False sonucu True olur, ardından True and False sonucu False verir. Soldan sağa okuyup or'u önce çözmeye kalkarsan yanlış sonuca ulaşırsın.

Parantez Sonucu Nasıl Değiştirir?

Aynı değişkenler ve aynı karşılaştırmalarla yalnızca parantezin yerini değiştirmek sonucu tersine çevirebilir. Bir okul kuralı olsun: 9. sınıf öğrencileri ile ortalaması en az 70 olan 10. sınıf öğrencileri bir etkinliğe katılabiliyor olsun.

sinif = 9
ortalama = 50

a = sinif == 9 or sinif == 10 and ortalama >= 70
b = (sinif == 9 or sinif == 10) and ortalama >= 70

print(a)
print(b)

Beklenen çıktı:

True
False

Parantezsiz ifade (a): and önce çalıştığı için sinif == 10 and ortalama >= 70 kısmı çözülür. 9 == 10 yanlış, 50 >= 70 yanlış olduğundan bu kısım False olur. Geriye sinif == 9 or False kalır; sinif == 9 doğru olduğu için sonuç True'dur. Yani ifade "9. sınıf ise kabul et" gibi davranır, ortalamaya bakmaz.

Parantezli ifade (b): Parantezin içi önce çözülür: sinif == 9 or sinif == 10 sonucu True olur. Sonra True and ortalama >= 70 hesaplanır; ortalama 50 olduğu için sonuç False çıkar. Bu ifade "sınıf koşulunu sağlayan herkesin ortalaması da en az 70 olmalı" anlamına gelir.

İki ifade farklı kurallar anlatıyor ve hangisinin doğru olduğu kuralın cümlesine bağlıdır. Öncelik sırasını ezbere bilsen de karışık koşullarda parantez kullanmayı tercih et: kodu okuyan kişi, senin kastettiğin gruplamayı hesap yapmadan görür.

Kısa Devre Değerlendirmesi: Sağ Taraf Her Zaman Çalışmaz

Python, and ve or ifadelerini soldan sağa değerlendirir ve sonuç belli olur olmaz durur. and için sol taraf False ise sonuç zaten False olacağından sağ taraf çalıştırılmaz. or için sol taraf True ise sonuç True olacağından sağ taraf yine çalıştırılmaz. Buna kısa devre değerlendirmesi denir.

En yararlı kullanımı koruyucu koşuldur. Aşağıdaki iki sürüm aynı iki koşulu içerir, yalnızca sıraları farklıdır:

a = 10
b = 0

print(b != 0 and a / b > 2)

Çıktı: False. b != 0 yanlış olduğu için bölme işlemine hiç gelinmez. Sırayı ters çevirelim:

a = 10
b = 0

print(a / b > 2 and b != 0)

Bu kez sağdaki koruyucu işe yaramaz, çünkü önce bölme çalışır ve program ZeroDivisionError: division by zero hatasıyla durur. Pratik kural: koruyucu koşul her zaman solda durur.

Sağ taraftaki işlemin yan etkisi de çalışmaz. Bir fonksiyon çağrısı sağda kalmışsa ve sol taraf sonucu belirlemişse fonksiyon hiç çağrılmaz:

def kontrol():
    print("kontrol çalıştı")
    return True

print(False and kontrol())
print(True or kontrol())

Çıktı iki satırdır: False ve True. "kontrol çalıştı" yazısı hiç görünmez.

Sık Yapılan Hatalar: x == 1 or 2, a > 5 and < 10 ve and ile or Karışıklığı

Sık Yapılan Hatalar: x == 1 or 2, a > 5 and < 10 ve and ile or Karışıklığı

1. x == 1 or 2 yazmak

Python bu ifadeyi (x == 1) or 2 olarak okur. 2 tek başına doğru değer sayıldığı için koşul her zaman doğru kabul edilir:

x = 7
print(x == 1 or 2)

if x == 1 or 2:
    print("içeri girdi")

Çıktı: önce 2, sonra içeri girdi. x 7 olmasına rağmen blok çalıştı. Doğru yazımlar şunlardır:

x = 7
print(x == 1 or x == 2)
print(x in (1, 2))

İkisi de False verir. Değer sayısı arttıkça in daha okunaklı kalır.

2. a > 5 and < 10 yazmak

Karşılaştırma operatörünün solunda bir değer bulunmalıdır. a > 5 and < 10 satırı SyntaxError: invalid syntax verir. Düzeltilmiş hâli a > 5 and a < 10 olur.

3. Zincirleme karşılaştırma

Python'da 5 < a < 10 geçerlidir ve a > 5 and a < 10 ile aynı anlama gelir:

for a in (3, 7, 12):
    print(a, 5 < a < 10, a > 5 and a < 10)
3 False False
7 True True
12 False False

4. and ile or'u karıştırmak

"x, 1 de olmasın 2 de olmasın" demek istiyorsun ama x != 1 or x != 2 yazıyorsun. Bu ifade her değerde doğrudur: x 1 ise ikinci parça, x 2 ise birinci parça doğru çıkar. Aradaki fark çıktıda görünür:

for x in (1, 2, 3):
    print(x, x != 1 or x != 2, x != 1 and x != 2)
1 True False
2 True False
3 True True

"İkisi de olmasın" cümlesi her iki koşulun birlikte sağlanmasını ister, bu yüzden and gerekir. Bu hataların çoğu kod yazmadan önce koşulu düz bir cümleyle kurarak yakalanabilir. Mantığını cümleye dökme alışkanlığını ücretsiz Algoritmik Düşünme Testi ile dilden bağımsız olarak deneyebilirsin.

Not ve Devam Bilgisine Göre Karar Veren Küçük Program

Aynı koşulu üç biçimde yazalım. Doğal dil: "Not 50 veya üstü ve devam 70 veya üstüyse dersi geçersin; yalnız biri sağlanıyorsa eksik var; ikisi de sağlanmıyorsa ikisi de eksik." Mantıksal ifade: not >= 50 ve devam >= 70. Python kodu aşağıda. Önce dört örnek girdinin tablosuna bakalım:

NotDevamnot >= 50devam >= 70and sonucuor sonucuMesaj
6080TrueTrueTrueTrueDersi geçtin
6050TrueFalseFalseTrueBir koşul eksik
4090FalseTrueFalseTrueBir koşul eksik
3040FalseFalseFalseFalseİkisi de eksik

Tablo kodun yapısını da gösterir. and sonucu doğruysa ilk dal çalışır. Buraya gelinmediyse and yanlıştır; bu durumda or doğruysa tam olarak bir koşul sağlanıyordur. İkisi de yanlışsa else devreye girer.

def karar(ders_notu, devam):
    if ders_notu >= 50 and devam >= 70:
        return "Dersi geçtin"
    elif ders_notu >= 50 or devam >= 70:
        return "Bir koşul eksik"
    else:
        return "İkisi de eksik"

for ders_notu, devam in ((60, 80), (60, 50), (40, 90), (30, 40)):
    print(ders_notu, devam, karar(ders_notu, devam))
60 80 Dersi geçtin
60 50 Bir koşul eksik
40 90 Bir koşul eksik
30 40 İkisi de eksik

not Python'da ayrılmış bir sözcük olduğu için değişken adı olarak kullanılamaz; bu yüzden ders_notu yazdık.

Şimdi kendi değerlerinle dene: tabloya önce kendi dört not ve devam çiftini yaz, her sütunu elle doldur, sonra bu değerleri döngüdeki demete koyup programı çalıştır. Çıktıyla tablon aynı çıkmıyorsa fark, koşulu yanlış kurduğun yeri gösterir.

Koşulunu Kendi Başına Kontrol Etmenin Dört Adımı

Bir koşulu yazdıktan sonra "çalışıyor gibi" görünmesi yetmez. Aşağıdaki sıra, and ve or içeren her if için tekrar kullanabileceğin bir kontrol listesidir.

  1. Koşulu önce cümleyle yaz. "Puan en az 50 olmalı ya da devam oranı en az 90 olmalı" gibi tek bir cümle kur. Cümlede "ve" ile "ya da" ayrımı net değilse kod da net olmaz.
  2. Her karşılaştırmayı ayrı ayrı True/False olarak yaz. Değişkenlere örnek değerler ver ve her parçanın sonucunu bir tabloya ya da deftere not et. Sonra and ve or bu sonuçları nasıl birleştiriyor, bak.
  3. Öncelik karışabilecek yerlere parantez koy. Python'un öncelik sırasını ezbere bilsen de parantez, niyetini kodda görünür kılar.
  4. Sınır değerleri dene. Eşitlik durumunu (>= mı > mı), 0 ve boş metin gibi değerleri ve en az bir "her ikisi de yanlış" girdiyi test et.
  5. Sonucu print ile doğrula. Beklediğin değeri önce tahmin et, sonra çalıştırıp karşılaştır.
puan = 50
devam = 80

print(puan >= 50)                      # True
print(devam >= 90)                     # False
print(puan >= 50 or devam >= 90)       # True
print((puan >= 50) and (devam >= 90))  # False

Çıktı sırasıyla True, False, True, False olur. Parçaları tek tek yazdırdığın için bileşik sonucun nereden geldiği açıkça görünür. puan değerini 49 yaparak sınırı da dene.

Koşul kurma becerisi, düzenli pratik ve geri bildirimle pekişir. Yazdığın koşulun neden yanlış çıktığını biriyle birlikte izlemek bu süreci hızlandırabilir. Birebir Python Özel Ders programı (28 ders; Ortaokul, Lise ve Üniversite; online ya da İzmir'de yüz yüze) bu yüzden koşulları ve algoritmik düşünmeyi kişiye özel ödevler ve alıştırmalarla çalışır; ilerleme, Öğrenci Portalı'ndaki alıştırma ve ödevlerle takip edilir.

Bir sonraki koşulunu yazmadan önce, tüm girdi kombinasyonlarının sonucunu kâğıda yaz ve kodu bu tabloyla karşılaştır.

Sık Sorulan Sorular

Python'da && ve || kullanılır mı?

Hayır, Python'da mantıksal işlemler için and, or ve not yazılır; && ve || sözdizimi hatası verir. Tek karakterli & ve | ise bitsel operatörlerdir, kısa devre yapmaz ve önceliği karşılaştırmalardan yüksektir. Bu yüzden koşullarda genellikle and ve or tercih edilir.

Bir if içinde kaç tane and ve or kullanabilirim?

Python sana sabit bir sayı dayatmaz; asıl sınır okunabilirliktir. Koşulu bir bakışta cümleyle anlatamıyorsan parçalarını anlamlı isimli değişkenlere ayır, örneğin gecti = puan >= 50, sonra if gecti or devam_yeterli: yaz.

x == 1 or x == 2 yerine daha kısa bir yazım var mı?

Evet, üyelik denetimi kullanabilirsin: x in (1, 2). Değerler ardışık bir aralıksa 1 <= x <= 2 biçimindeki zincirleme karşılaştırma da işini görür. Her iki yazım da tekrarlanan x == kalıbından kurtarır.

Koşulları cümleyle kurup küçük parçalara bölerek sınadığında and ve or çok daha öngörülebilir davranır; her yeni koşulda aynı alışkanlığı sürdürmen yeterli.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara