Python Mantıksal Operatörleri: Uygulamalı Bir Giriş
Python, üç mantıksal operatör sunar: and, or ve not. Boolean operatörler olarak da bilinen bu operatörler, birden çok koşulu değerlendirir ve bir ifadenin genel doğruluk değerini belirler.
Programlamada sıklıkla birden çok koşula dayalı kararlar vermemiz gerekir. Örneğin, bazı koşulların eşzamanlı olarak sağlanması durumunda belirli bir eylemi çalıştırmak isteyebiliriz. Alternatif olarak, birden fazla koşuldan herhangi biri sağlanırsa farklı bir eylemi tetiklemek isteyebiliriz.
Python bu senaryoları ele almak için şu mantıksal operatörleri sunar: – and, or, not.
Bu eğitimde, Python mantıksal operatörlerinin nasıl çalıştığını ve bunları programlama ile veri biliminde nasıl kullanacağınızı öğreneceğiz. Dikkat edin, bu operatörleri kavramsal olarak temsil etmek için büyük harfli AND, OR ve NOT kelimelerini kullanacağız. Python anahtar sözcüklerine ise şu biçimde atıfta bulunacağız: and, or ve not.
Düzenlenmiş bir Python müfredatı arıyorsanız, altı dersten oluşan şu Python Programming beceri yoluna göz atın.
Ayrıntılara girmeden önce, acele edenler için çok kısa bir yanıtla başlayalım.
Kısa Cevap: Python Mantıksal Operatörleri Nelerdir?
Python mantıksal operatörleri (and, or, not), kodumuzda bağlaç görevi gören, tek bir ifade içinde birden çok koşulu birbirine bağlayıp değerlendiren özel anahtar sözcüklerdir.
Şu örneği düşünün:
temperature =25
is_sunny = True
if temperature >20 and is_sunny:print("It's a perfect day for a picnic!")Altyapı:
Bu durumda, hava güneşliyse ya da şemsiyemiz varsa yürüyüşe çıkarız.
Son olarak, not operatörü bir koşulun doğruluk değerini tersine çevirir:
if not is_sunny:print("Maybe we should stay indoors.")Altyapı:
Burada, ileti yalnızca hava güneşli değilse yazdırılır.
Mantıksal operatörler, karmaşık koşulları özlü ve güçlü biçimde ifade etmemizi sağlar; böylece programlarımız birden çok faktöre dayalı kararlar alabilir. Şimdi daha derine inelim ve and mantıksal operatörüyle başlayalım.
Python: and Operatörü
Boolean mantığında AND işlemi iki değeri veya ifadeyi karşılaştırır. Yalnızca her iki değer de true ise true sonucunu üretir. Değerlerden biri veya her ikisi false ise AND işleminin sonucu false olur. İşte AND'in davranışının özeti:
İşlem
Çıktı değeri
true AND true
true
true AND false
false
false AND true
false
false AND false
false
Bu doğruluk tablosunu Python'un and operatörüyle yeniden üretebiliriz:
options = True, False
for a inoptions:for b inoptions:print(f"{a} and {b} gives {a and b}")Altyapı:
True and True gives True
True and False gives False
False and True gives False
False and False gives False
Altyapı:
options değişkeni iki Boolean değeri içerir. İçiçe for döngüleri, True ve False değerlerinin tüm permütasyonlarını oluşturmak için seçenekler üzerinde iki kez yineler.
Genellikle, and için kullanılan operand ifadeleri karşılaştırma veya eşitlik operatörlerini içerir:
names ="James","Bob","David","Jane","Kate","Mary"for name innames:iflen(name)<5 and name[0]=="J":print(name)Altyapı:
Ad, yalnızca beş harften azsa ve "J" ile başlıyorsa yazdırılır. Her iki koşulun da karşılanması gerekir.
< ve == gibi karşılaştırma ve eşitlik operatörleri, True veya False olarak değerlendirilir.
Bununla birlikte Python and operatörü yalnızca Boolean True ve False üzerinde değil, herhangi bir veri türü üzerinde çalışır. Çıktı değeri de herhangi bir veri türünde olabilir.
Bu bölümde Python'un and operatörünü daha ayrıntılı inceleyelim. Önce, doğruluk kavramını ele alacağız.
Python: truthy ve falsy
Her Python nesnesi, yerleşik bool() ile Boolean türe dönüştürülebilir. bool(object)True döndürüyorsa nesne truthy'dir. Falsy bir nesne için bool(object)False döndürür.
Python'un and operatörü operandlarının doğruluğunu (truthiness) dikkate alır. Her iki operand da truthy ise and operatörü de truthy bir değer döndürür. Operandlardan biri veya her ikisi falsy ise and falsy bir değer döndürür. Bazı örneklere bakalım:
if42and"python":print("Both operands are truthy")else:print("One or both operands are falsy")Altyapı:
Tamsayılar ve ondalık sayılar gibi sayısal türler sıfır değilse truthy, sıfıra eşitse falsy kabul edilir. Diziler (ör. dizgiler), boş değilse truthy, boşsa falsy kabul edilir.
Dolayısıyla, yukarıdaki üç örnekten yalnızca ilki, and operatörünün truthy olarak değerlendirilmesi için her iki operandın da truthy olması koşulunu sağlar.
and operatörü her zaman Boolean bir değer döndürmez. and içeren bir ifade, operandlardan birine de değerlendirilebilir. Aynı örnekleri kullanarak bunu biraz daha derinlemesine inceleyelim. and ifadelerini bir if deyiminde kullanmak yerine doğrudan değerlendireceğiz:
print(42 and "python")print(42 and "")print(0 and "python")Altyapı:
Bu ifadelerde neler olduğunun farkına varabildiniz mi?
İki operandı 0 ve "python" olan son örnekten başlayalım. and operatörü iki truthy operand arar. İlk operand 0 olduğundan falsy'dir. Tüm ifade, ikinci operandın değerinden bağımsız olarak falsy olacağından programın ikinci operandı kontrol etmesine gerek yoktur.
Ancak and operatörü False döndürmez. Bunun yerine, ilk operandı doğrudan döndürür. İlk operand falsy olduğundan, tüm and ifadesi falsy olarak değerlendirilir. Bu durum Python'da sorun yaratmaz; çünkü Python'un true veya false bir değere ihtiyaç duyduğu yerlerde bir nesnenin doğruluğunu kullanabilir.
İlk örnekte, ilk operand 42 ve truthy'dir. Program ikinci operandı değerlendirir ve onu döndürür. İkinci operand truthy olan "python" dizgesidir; dolayısıyla tüm ifade truthy olarak değerlendirilir.
İkinci örnekte, ilk operand yine 42'dir. Bu truthy olduğundan program ikinci operandı değerlendirir ve döndürür; bu da boş dizgedir. Boş dizge falsy olduğu için tüm and ifadesi falsy olarak değerlendirilir.
İlk operand truthy olduğunda, and operatörü ikinci operandın değeri truthy ya da falsy olsun, daima ikinci operandın değerini döndürür.
İlk operand falsy olduğunda, Python ikinci operandı değerlendirmez. Buna kısa devre (short-circuiting) denir ve bir tür tembel değerlendirmedir. Bunu şu kodla doğrulayabilirsiniz:
İkinci operand 5/0'dır ve normalde bir ZeroDivisionError yükseltirdi. Ancak ilk operand falsy olduğu için bu örnekte 5/0 ifadesi değerlendirilmez. İstisna asla yükseltilmez.
Örnek: Programcıların Çevrim İçi Mağazası
Gerçek hayattaki bir uygulamayı temsil eden basit bir örnek düşünelim. Programcılara ürün tedarik eden bir çevrim içi mağazadaki işlemler bir API üzerinden kaydedilir ve erişilir. Veriler bir sözlük listesine dönüştürülür. Listedeki her öğe bir işlemi temsil eder ve her işlem ilgili bilgileri içeren bir sözlüktür:
data =[{"Item":"Python Book","Price":50,"Quantity":1,"Success": True},{"Item":"Coffee Machine","Price":125,"Quantity":1,"Success": False},{"Item":"Headphones","Price":250,"Quantity":1,"Success": True},{"Item":"Cables","Price":15.99,"Quantity":3,"Success": True},]Altyapı:
Her işlem; ürünün adı ve fiyatını, siparişteki miktarı ve işlemin başarılı olup olmadığını içerir.
Diyelim ki fiyatı 100 $ ve üzeri olan ürünler için başarılı işlemlere ihtiyacımız var. Gerekli satırları filtrelemek için and operatörünü kullanabiliriz:
for item indata:if item["Success"] and item["Price"]>=100:print(item)Altyapı:
Bu kodun çıktısı, her iki koşulu da karşılayan tek işlemi gösterir. İşlemler listesindeki her öğe için if deyimi iki ifadenin doğruluğunu kontrol eder:
Her sözlükteki "Success" anahtarına karşılık gelen değerler True veya False'tur.
item["Price"] >= 100 ifadesindeki büyük eşittir operatörü de True veya False döndürür.
Python kitabı ve kablolar 100 $ altı oldukları için fiyat koşulunu karşılamaz. Kahve makinesi bu eşik değerin üzerindedir ancak işlem başarısız olduğundan çıktıya dahil edilmez.
Bu çevrim içi mağaza örneğine bu eğitimin ilerleyen kısımlarında geri döneceğiz.
Bir sonraki bölümde or operatörüne odaklanacağız.
Python: or Operatörü
Boolean mantığında OR mantıksal operatörü iki operand gerektirir. Operandlardan en az biri true ise sonuç true olarak değerlendirilir:
İşlem
Çıktı değeri
true OR true
true
true OR false
true
false OR true
true
false OR false
false
Bu doğruluk tablosunu Python'un or operatörünü kullanarak yeniden üretebiliriz:
options = True, False
for a inoptions:for b inoptions:print(f"{a} or {b} gives {a or b}")Altyapı:
True or True gives True
True or False gives True
False or True gives True
False or False gives False
Altyapı:
Daha önce incelediğimiz kişi adları örneğini and yerine or kullanarak tekrar ele alabiliriz:
names ="James","Bob","David","Jane","Kate","Mary"for name innames:iflen(name)<5 or name[0]=="J":print(name)Altyapı:
if deyimi artık bir or ifadesi içeriyor. Bu nedenle, for döngüsü ya beş harften az olan ya da "J" harfiyle başlayan tüm adları yazdırır. "Jane" dizgesi her iki koşulu da sağlar. Diğer yazdırılan adlar iki koşuldan birini sağlar.
Python or operatörü: truthy ve falsy
or operatörü de yalnızca True ve False Boolean'larını değil, truthy ve falsy değerlere bakar. Bazı örnekler görelim:
if42 or [10,20,30]:print("At least one operand is truthy")else:print("None of the operands is truthy")Altyapı:
İlk örnekte, 42 tamsayısı ve boş olmayan [10, 20, 30] listesi truthy'dir. or operatörü en az bir operandın truthy olmasını gerektirdiği için tüm ifade truthy olarak değerlendirilir.
İkinci örnekte 42 truthy'dir ancak boş liste [], boş bir dizi olduğu için falsy kabul edilir. İki operandtan biri truthy olduğundan tüm or ifadesi truthy olarak değerlendirilir.
Son örnekte hem 0 hem de [] falsy'dir. Bu nedenle tüm ifade falsy olarak değerlendirilir.
or operatörü, gereksiz değerlendirmelerden kaçınmak için ifadeyi değerlendirirken kısa devreyi de kullanır. Bu noktayı örneklerle gösterelim:
print(42 or [10,20,30])print(42 or [])print([] or 42)print([] or 0)Altyapı:
İlk örnekte, ilk operand 42'dir ve truthy'dir. or, tüm ifadenin nihai doğruluğunu belirlemek için yalnızca bir operandın truthy olmasını gerektirdiğinden, bu ilk operand hemen döndürülür. İkinci operand, nihai sonuca etkisi olmayacağından değerlendirilmez. or operatörü Boolean True yerine ilk operand olan 42'yi döndürür. Python'da, if ve while deyimleri gibi durumlarda herhangi bir truthy değer, Boolean True ile aynı etkiye sahiptir.
İkinci örnekte de ilk operand 42'dir ve ikinci operand falsy olsa bile ifade bu tamsayıyı döndürür.
Üçüncü ve dördüncü örneklerde ilk operand boş listedir ve falsy'dir. Bu nedenle her iki durumda da ikinci operand döndürülür.
Örnek: Programcıların Çevrim İçi Mağazası
Programcılara ürün satan çevrim içi mağazadaki işlemleri yeniden ele alalım. Bu örnekte kullandığımız dört örnek işlem şunlardır:
data =[{"Item":"Python Book","Price":50,"Quantity":1,"Success": True},{"Item":"Coffee Machine","Price":125,"Quantity":1,"Success": False},{"Item":"Headphones","Price":250,"Quantity":1,"Success": True},{"Item":"Cables","Price":15.99,"Quantity":3,"Success": True},]Altyapı:
Müşteri davranışını daha ayrıntılı incelemek için bazı işlemleri belirlemeniz gerekiyor. Başarısız olan ya da fiyatı 75 $ altındaki bir ürünü içeren işlemleri bulmak istiyorsunuz. İki koşulunuz olduğuna ve bir işlemin en az birini karşılaması yeterli olduğuna göre or operatörünü kullanabilirsiniz:
for item indata:if item["Success"]== False or item["Price"]<75:print(item)Altyapı:
Bu for döngüsü, gerekliliklerden en az birini karşılayan satırları gösterir. Python kitabı ve kablolar, fiyatları 75 $ altında olduğu için dahil edilir. Kahve makinesi ise işlem başarısız olduğu için dahil edilir.
Başarısız işlemleri filtrelemenin alternatif bir yolu daha vardır; bunu bir sonraki bölümde inceleyeceğiz.
Python: not Operatörü
NOT operatörü, AND ve OR'den farklıdır çünkü yalnızca bir operand gerektirir. NOT, true'yu false'a ve tersini çevirir. İşte NOT için doğruluk tablosu:
İşlem
Çıktı değeri
NOT true
false
NOT false
true
Bunu Python'un not operatörüyle çoğaltabiliriz:
options = True, False
for a inoptions:print(f"not {a} evaluates to {not a}")Altyapı:
not True evaluates to False
not False evaluates to True
Altyapı:
Python not operatörü: truthy ve falsy
and ve or gibi, not ile kullanılan operandın Boolean olması gerekmez. Her nesne ya truthy ya da falsy olduğundan, herhangi bir nesne not ile kullanılabilir.
if not "python":print("The `if` statement evaluated as `True`")else:print("The `if` statement evaluated as `False`")Altyapı:
Önceki bölümlerde çevrim içi bir mağazadaki işlemleri kullandık. Bu örnekte başarısız olan tüm işlemleri göstermek istiyoruz. Bir seçenek, == eşitlik operatörünü kullanarak data["Success"]'ın False'a eşit olup olmadığını kontrol etmektir. Ancak bunun yerine not operatörünü de kullanabiliriz:
data =[{"Item":"Python Book","Price":50,"Quantity":1,"Success": True},{"Item":"Coffee Machine","Price":125,"Quantity":1,"Success": False},{"Item":"Headphones","Price":250,"Quantity":1,"Success": True},{"Item":"Cables","Price":15.99,"Quantity":3,"Success": True},]for item indata:if not item["Success"]:print(item)Altyapı:
Başarısız işlemler için item["Success"] değeri False'a eşit olduğundan, not item["Success"]True döndürür. Bu nedenle for döngüsü başarısız işlemleri yazdırır:
Bir sonraki bölümde, birden çok mantıksal operatörü tek bir ifadede nasıl birleştireceğimizi öğreneceğiz.
Python: Operatör Önceliği
Şimdiye kadar gösterilen örneklerde her birinde yalnızca bir mantıksal operatör kullandık. Bu bölümde, tek bir ifadede daha fazla mantıksal operatörü birleştirdiğimizde ne olduğunu göreceğiz.
Python: and, or'dan daha yüksek önceliğe sahiptir
Önceden kullandığımız çevrim içi mağazadaki işlemlerle çalışmaya devam edeceğiz. Şu koşullu deyimi deneyelim:
data =[{"Item":"Python Book","Price":50,"Quantity":1,"Success": True},{"Item":"Coffee Machine","Price":125,"Quantity":1,"Success": False},{"Item":"Headphones","Price":250,"Quantity":1,"Success": True},{"Item":"Cables","Price":15.99,"Quantity":3,"Success": True},]
for item indata:if item["Price"]>100 or item["Quantity"]>2 and item["Success"]:print(item)Altyapı:
if deyimi iki mantıksal operatör içerir. Python'un bu ifadeyi nasıl ele aldığını incelemeden önce, if deyiminin Türkçe bir çevirisine bakalım: Ürünün fiyatı 100 $ üzerindeyse ya da satılan miktar ikiden büyük ve satış başarılıysa, ürünü yazdır.
Bu ifade, daha fazla noktalama işareti olmadan muğlaktır ve cümleye daha fazla virgül eklesek bile hâlâ kafa karıştırıcı olabilir. Örneğin, kahve makinesi işlemi dahil edilmeli midir? Ürünün fiyatı gereken eşiğin üzerinde ancak işlem başarılı olmamıştır.
Python bu belirsizliği, and operatörüne or operatöründen daha yüksek öncelik vererek çözer. Bu, önce and ifadesinin değerlendirileceği ve sonucunun or ifadesinde kullanılacağı anlamına gelir.
Dolayısıyla önce item["Quantity"] > 2 and item["Success"] ifadesi değerlendirilir. Bu ifade yalnızca kabloların yer aldığı işlem için truthy bir değer döndürür. Kalan öğeler için falsy olarak değerlendirilir.
and ifadesinden gelen değer daha sonra or operatörüyle kullanılır. or ifadesi, and ifadesi için truthy döndüren herhangi bir öğe—bu yalnızca kabloların yer aldığı işlemdi—ve fiyatı 100 $ üzerindeki öğeler için truthy bir değer döndürür. Eşik değerin üzerindeki iki ürün vardır: kahve makinesi ve kulaklık.
Python: parantezler ve mantıksal operatörler
Peki, fiyatı 100 $ üzerindeki ya da miktarı ikiden fazla olan işlemleri istiyor, ancak ayrıca işlemin başarılı olmasını da garanti etmek istiyorsak? Bu durumda, önce değerlendirilecek şekilde or ifadesinin and'den daha yüksek önceliğe sahip olmasını istiyoruz. Bunu or ifadesini parantez içine alarak sağlayabiliriz:
for item indata:if(item["Price"]>100 or item["Quantity"]>2) and item["Success"]:print(item)Altyapı:
not önce değerlendirildiğinden, bu ifade önce item["Success"] üzerine not operatörünü uygular. not ifadesinden gelen değer daha sonra and ifadesinde ilk operand olarak kullanılır. Yalnızca kahve makinesi kaydı bu koşulu sağlar—başarısız olan ve fiyatı 100 $ üzerindeki tek işlemdir.
Ancak, parantez kullanarak and operatörüne öncelik verebiliriz:
for item indata:ifnot(item["Success"] and item["Price"]>100):print(item)Altyapı:
Bu durumda önce and ifadesi değerlendirilir. 100 $ üzerindeki başarılı tek işlem olduğu için yalnızca kulaklık kaydı True olarak değerlendirilir. Ancak parantez içindeki ifadenin önüne bir not operatörü ekliyoruz. Bu nedenle kod, kalan üç işlemi çıktılar.
Genel olarak, bir ifade çok fazla operatör içerdiği için fazla karmaşık hâle geliyorsa, okunabilirliği artırmak için onu bölmek en iyisidir.
Sonuç
and, or ve not Python mantıksal operatörleri, programlama ve veri biliminin geniş bir alanında yoğun biçimde kullanılır. Bu operatörler, mantık ve matematikte yaygın olarak kullanılan AND, OR ve NOT Boolean mantıksal operatörlerinin davranışını yineler.
Ancak Python operatörleri yalnızca Boolean değerleri değil, herhangi bir nesneyi kabul edebilir. and ve or operatörleri kısa devre değerlendirmesi kullanır ve çıktı olarak operandlardan birini döndürür.
Python mantıksal operatörleri; verileri filtrelemek, veri kümelerinde özellikleri belirlemek ve bir programın akışını kontrol etmek için karmaşık kurallar oluşturmak adına temel araçlardır. Bunun hakkında daha fazla bilgi edinmek isterseniz, dokuz dersten oluşan şu Data Analyst With Python kariyer yoluna göz atın.
Malta Üniversitesi’nde lisans düzeyinde Fizik ve Matematik okudum. Ardından Londra’ya taşındım ve Imperial College’da Fizik alanında doktoramı tamamladım. İnsan retinasını görüntülemek için yeni optik teknikler üzerine çalıştım. Şimdi Python hakkında yazmaya, Python’u anlatmaya ve Python öğretmeye odaklanıyorum.
Python Mantıksal Operatörleri SSS
and operatörünü birden çok koşulu aynı anda test etmek için kullanabilir miyim?⌄
Evet, and operatörünü kullanarak birden çok koşulu zincirleyebilirsiniz. Örneğin: if x > 5 and x < 10 and x != 7.
and operatörü ile bit düzeyinde VE operatörü (&) arasındaki fark nedir?⌄
and operatörü Boolean değerler üzerinde mantıksal VE işlemi yapar ve yalnızca her iki operand True ise True döndürür. Bit düzeyinde VE operatörü (&), tamsayı değerlerin ikili gösterimleri üzerinde bit düzeyinde VE işlemi yapar.
Python, bazı diğer dillerde olduğu gibi && ve || operatörlerine sahip mi?⌄
Hayır, Python mantıksal işlemler için && ve || sembolleri yerine and ve or anahtar sözcüklerini kullanır.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Programlama becerilerinizi geliştirin. Kodu nasıl optimize edeceğinizi, fonksiyonları ve testleri nasıl yazacağınızı ve en iyi uygulama yazılım mühendisliği tekniklerini nasıl kullanacağınızı öğrenin.
Yapay zekanın temellerini keşfedin, yapay zekayı işinizde etkili bir şekilde kullanmayı öğrenin ve dinamik yapay zeka dünyasında yolunuzu bulmak için ChatGPT gibi modellere dalın.
Programlamada sıklıkla birden çok koşula dayalı kararlar vermemiz gerekir. Örneğin, bazı koşulların eşzamanlı olarak sağlanması durumunda belirli bir eylemi çalıştırmak isteyebiliriz. Alternatif olarak, birden fazla koşuldan herhangi biri sağlanırsa farklı bir eylemi tetiklemek isteyebiliriz.
Python bu senaryoları ele almak için şu mantıksal operatörleri sunar: –
and,or,not.Bu eğitimde, Python mantıksal operatörlerinin nasıl çalıştığını ve bunları programlama ile veri biliminde nasıl kullanacağınızı öğreneceğiz. Dikkat edin, bu operatörleri kavramsal olarak temsil etmek için büyük harfli AND, OR ve NOT kelimelerini kullanacağız. Python anahtar sözcüklerine ise şu biçimde atıfta bulunacağız:
and,orvenot.Düzenlenmiş bir Python müfredatı arıyorsanız, altı dersten oluşan şu Python Programming beceri yoluna göz atın.
Ayrıntılara girmeden önce, acele edenler için çok kısa bir yanıtla başlayalım.
Kısa Cevap: Python Mantıksal Operatörleri Nelerdir?
Python mantıksal operatörleri (
and,or,not), kodumuzda bağlaç görevi gören, tek bir ifade içinde birden çok koşulu birbirine bağlayıp değerlendiren özel anahtar sözcüklerdir.Şu örneği düşünün:
Burada, and operatörü, iletiyi yalnızca
her ikikoşul sağlandığında yazdırır: sıcaklık 20 derecenin üzerindevehava güneşliyse.oroperatörünü kullanan bir başka örneğe bakalım:Bu durumda, hava güneşliyse ya da şemsiyemiz varsa yürüyüşe çıkarız.
Son olarak,
notoperatörü bir koşulun doğruluk değerini tersine çevirir:Burada, ileti yalnızca hava güneşli değilse yazdırılır.
Mantıksal operatörler, karmaşık koşulları özlü ve güçlü biçimde ifade etmemizi sağlar; böylece programlarımız birden çok faktöre dayalı kararlar alabilir. Şimdi daha derine inelim ve
andmantıksal operatörüyle başlayalım.Python:
andOperatörüBoolean mantığında AND işlemi iki değeri veya ifadeyi karşılaştırır. Yalnızca her iki değer de true ise true sonucunu üretir. Değerlerden biri veya her ikisi false ise AND işleminin sonucu false olur. İşte AND'in davranışının özeti:
İşlem
Çıktı değeri
true AND true
true
true AND false
false
false AND true
false
false AND false
false
Bu doğruluk tablosunu Python'un
andoperatörüyle yeniden üretebiliriz:optionsdeğişkeni iki Boolean değeri içerir. İçiçefordöngüleri,TrueveFalsedeğerlerinin tüm permütasyonlarını oluşturmak için seçenekler üzerinde iki kez yineler.Genellikle, and için kullanılan operand ifadeleri karşılaştırma veya eşitlik operatörlerini içerir:
Ad, yalnızca beş harften azsa ve
"J"ile başlıyorsa yazdırılır. Her iki koşulun da karşılanması gerekir.<ve==gibi karşılaştırma ve eşitlik operatörleri,TrueveyaFalseolarak değerlendirilir.Bununla birlikte Python
andoperatörü yalnızca BooleanTrueveFalseüzerinde değil, herhangi bir veri türü üzerinde çalışır. Çıktı değeri de herhangi bir veri türünde olabilir.Bu bölümde Python'un
andoperatörünü daha ayrıntılı inceleyelim. Önce, doğruluk kavramını ele alacağız.Python: truthy ve falsy
Her Python nesnesi, yerleşik
bool()ile Boolean türe dönüştürülebilir.bool(object)Truedöndürüyorsa nesne truthy'dir. Falsy bir nesne içinbool(object)Falsedöndürür.Python'un
andoperatörü operandlarının doğruluğunu (truthiness) dikkate alır. Her iki operand da truthy iseandoperatörü de truthy bir değer döndürür. Operandlardan biri veya her ikisi falsy iseandfalsy bir değer döndürür. Bazı örneklere bakalım:Şimdi de şu örneği düşünelim:
Ve son olarak şu örneğe bakalım:
Tamsayılar ve ondalık sayılar gibi sayısal türler sıfır değilse truthy, sıfıra eşitse falsy kabul edilir. Diziler (ör. dizgiler), boş değilse truthy, boşsa falsy kabul edilir.
Dolayısıyla, yukarıdaki üç örnekten yalnızca ilki,
andoperatörünün truthy olarak değerlendirilmesi için her iki operandın da truthy olması koşulunu sağlar.andoperatörü her zaman Boolean bir değer döndürmez.andiçeren bir ifade, operandlardan birine de değerlendirilebilir. Aynı örnekleri kullanarak bunu biraz daha derinlemesine inceleyelim.andifadelerini birifdeyiminde kullanmak yerine doğrudan değerlendireceğiz:Bu ifadelerde neler olduğunun farkına varabildiniz mi?
İki operandı
0ve"python"olan son örnekten başlayalım.andoperatörü iki truthy operand arar. İlk operand0olduğundan falsy'dir. Tüm ifade, ikinci operandın değerinden bağımsız olarak falsy olacağından programın ikinci operandı kontrol etmesine gerek yoktur.Ancak
andoperatörüFalsedöndürmez. Bunun yerine, ilk operandı doğrudan döndürür. İlk operand falsy olduğundan, tümandifadesi falsy olarak değerlendirilir. Bu durum Python'da sorun yaratmaz; çünkü Python'un true veya false bir değere ihtiyaç duyduğu yerlerde bir nesnenin doğruluğunu kullanabilir.İlk örnekte, ilk operand
42ve truthy'dir. Program ikinci operandı değerlendirir ve onu döndürür. İkinci operand truthy olan"python"dizgesidir; dolayısıyla tüm ifade truthy olarak değerlendirilir.İkinci örnekte, ilk operand yine
42'dir. Bu truthy olduğundan program ikinci operandı değerlendirir ve döndürür; bu da boş dizgedir. Boş dizge falsy olduğu için tümandifadesi falsy olarak değerlendirilir.İlk operand truthy olduğunda,
andoperatörü ikinci operandın değeri truthy ya da falsy olsun, daima ikinci operandın değerini döndürür.İlk operand falsy olduğunda, Python ikinci operandı değerlendirmez. Buna kısa devre (short-circuiting) denir ve bir tür tembel değerlendirmedir. Bunu şu kodla doğrulayabilirsiniz:
İkinci operand
5/0'dır ve normalde birZeroDivisionErroryükseltirdi. Ancak ilk operand falsy olduğu için bu örnekte5/0ifadesi değerlendirilmez. İstisna asla yükseltilmez.Örnek: Programcıların Çevrim İçi Mağazası
Gerçek hayattaki bir uygulamayı temsil eden basit bir örnek düşünelim. Programcılara ürün tedarik eden bir çevrim içi mağazadaki işlemler bir API üzerinden kaydedilir ve erişilir. Veriler bir sözlük listesine dönüştürülür. Listedeki her öğe bir işlemi temsil eder ve her işlem ilgili bilgileri içeren bir sözlüktür:
Her işlem; ürünün adı ve fiyatını, siparişteki miktarı ve işlemin başarılı olup olmadığını içerir.
Diyelim ki fiyatı 100 $ ve üzeri olan ürünler için başarılı işlemlere ihtiyacımız var. Gerekli satırları filtrelemek için
andoperatörünü kullanabiliriz:Bu kodun çıktısı, her iki koşulu da karşılayan tek işlemi gösterir. İşlemler listesindeki her öğe için
ifdeyimi iki ifadenin doğruluğunu kontrol eder:"Success"anahtarına karşılık gelen değerlerTrueveyaFalse'tur.item["Price"] >= 100ifadesindeki büyük eşittir operatörü deTrueveyaFalsedöndürür.Python kitabı ve kablolar 100 $ altı oldukları için fiyat koşulunu karşılamaz. Kahve makinesi bu eşik değerin üzerindedir ancak işlem başarısız olduğundan çıktıya dahil edilmez.
Bu çevrim içi mağaza örneğine bu eğitimin ilerleyen kısımlarında geri döneceğiz.
Bir sonraki bölümde
oroperatörüne odaklanacağız.Python:
orOperatörüBoolean mantığında OR mantıksal operatörü iki operand gerektirir. Operandlardan en az biri true ise sonuç true olarak değerlendirilir:
İşlem
Çıktı değeri
true OR true
true
true OR false
true
false OR true
true
false OR false
false
Bu doğruluk tablosunu Python'un
oroperatörünü kullanarak yeniden üretebiliriz:Daha önce incelediğimiz kişi adları örneğini
andyerineorkullanarak tekrar ele alabiliriz:ifdeyimi artık birorifadesi içeriyor. Bu nedenle,fordöngüsü ya beş harften az olan ya da"J"harfiyle başlayan tüm adları yazdırır."Jane"dizgesi her iki koşulu da sağlar. Diğer yazdırılan adlar iki koşuldan birini sağlar.Python
oroperatörü: truthy ve falsyor operatörü de yalnızca
TrueveFalseBoolean'larını değil, truthy ve falsy değerlere bakar. Bazı örnekler görelim:Şimdi de şu örneği ele alalım:
Ve şu son örneği de değerlendirelim:
İlk örnekte,
42tamsayısı ve boş olmayan[10, 20, 30]listesi truthy'dir.oroperatörü en az bir operandın truthy olmasını gerektirdiği için tüm ifade truthy olarak değerlendirilir.İkinci örnekte
42truthy'dir ancak boş liste[], boş bir dizi olduğu için falsy kabul edilir. İki operandtan biri truthy olduğundan tüm or ifadesi truthy olarak değerlendirilir.Son örnekte hem
0hem de[]falsy'dir. Bu nedenle tüm ifade falsy olarak değerlendirilir.oroperatörü, gereksiz değerlendirmelerden kaçınmak için ifadeyi değerlendirirken kısa devreyi de kullanır. Bu noktayı örneklerle gösterelim:İlk örnekte, ilk operand
42'dir ve truthy'dir.or, tüm ifadenin nihai doğruluğunu belirlemek için yalnızca bir operandın truthy olmasını gerektirdiğinden, bu ilk operand hemen döndürülür. İkinci operand, nihai sonuca etkisi olmayacağından değerlendirilmez. or operatörü BooleanTrueyerine ilk operand olan42'yi döndürür. Python'da,ifve while deyimleri gibi durumlarda herhangi bir truthy değer, BooleanTrueile aynı etkiye sahiptir.İkinci örnekte de ilk operand
42'dir ve ikinci operand falsy olsa bile ifade bu tamsayıyı döndürür.Üçüncü ve dördüncü örneklerde ilk operand boş listedir ve falsy'dir. Bu nedenle her iki durumda da ikinci operand döndürülür.
Örnek: Programcıların Çevrim İçi Mağazası
Programcılara ürün satan çevrim içi mağazadaki işlemleri yeniden ele alalım. Bu örnekte kullandığımız dört örnek işlem şunlardır:
Müşteri davranışını daha ayrıntılı incelemek için bazı işlemleri belirlemeniz gerekiyor. Başarısız olan ya da fiyatı 75 $ altındaki bir ürünü içeren işlemleri bulmak istiyorsunuz. İki koşulunuz olduğuna ve bir işlemin en az birini karşılaması yeterli olduğuna göre
oroperatörünü kullanabilirsiniz:Bu
fordöngüsü, gerekliliklerden en az birini karşılayan satırları gösterir. Python kitabı ve kablolar, fiyatları 75 $ altında olduğu için dahil edilir. Kahve makinesi ise işlem başarısız olduğu için dahil edilir.Başarısız işlemleri filtrelemenin alternatif bir yolu daha vardır; bunu bir sonraki bölümde inceleyeceğiz.
Python:
notOperatörüNOT operatörü, AND ve OR'den farklıdır çünkü yalnızca bir operand gerektirir. NOT, true'yu false'a ve tersini çevirir. İşte NOT için doğruluk tablosu:
İşlem
Çıktı değeri
NOT true
false
NOT false
true
Bunu Python'un
notoperatörüyle çoğaltabiliriz:Python
notoperatörü: truthy ve falsyandveorgibi,notile kullanılan operandın Boolean olması gerekmez. Her nesne ya truthy ya da falsy olduğundan, herhangi bir nesnenotile kullanılabilir.Şu örneğe de bakalım:
Truthy değerler
notoperatörüyleFalse'a, falsy değerlerTrue'ya dönüştürülür.andveor'un aksine,notoperatörü daima Boolean bir nesne döndürür:Örnek: Programcıların Çevrim İçi Mağazası
Önceki bölümlerde çevrim içi bir mağazadaki işlemleri kullandık. Bu örnekte başarısız olan tüm işlemleri göstermek istiyoruz. Bir seçenek,
==eşitlik operatörünü kullanarakdata["Success"]'ınFalse'a eşit olup olmadığını kontrol etmektir. Ancak bunun yerinenotoperatörünü de kullanabiliriz:Başarısız işlemler için
item["Success"]değeriFalse'a eşit olduğundan, notitem["Success"]Truedöndürür. Bu nedenle for döngüsü başarısız işlemleri yazdırır:Bir sonraki bölümde, birden çok mantıksal operatörü tek bir ifadede nasıl birleştireceğimizi öğreneceğiz.
Python: Operatör Önceliği
Şimdiye kadar gösterilen örneklerde her birinde yalnızca bir mantıksal operatör kullandık. Bu bölümde, tek bir ifadede daha fazla mantıksal operatörü birleştirdiğimizde ne olduğunu göreceğiz.
Python:
and,or'dan daha yüksek önceliğe sahiptirÖnceden kullandığımız çevrim içi mağazadaki işlemlerle çalışmaya devam edeceğiz. Şu koşullu deyimi deneyelim:
ifdeyimi iki mantıksal operatör içerir. Python'un bu ifadeyi nasıl ele aldığını incelemeden önce,ifdeyiminin Türkçe bir çevirisine bakalım: Ürünün fiyatı 100 $ üzerindeyse ya da satılan miktar ikiden büyük ve satış başarılıysa, ürünü yazdır.Bu ifade, daha fazla noktalama işareti olmadan muğlaktır ve cümleye daha fazla virgül eklesek bile hâlâ kafa karıştırıcı olabilir. Örneğin, kahve makinesi işlemi dahil edilmeli midir? Ürünün fiyatı gereken eşiğin üzerinde ancak işlem başarılı olmamıştır.
Python bu belirsizliği,
andoperatörüneoroperatöründen daha yüksek öncelik vererek çözer. Bu, önceandifadesinin değerlendirileceği ve sonucununorifadesinde kullanılacağı anlamına gelir.Dolayısıyla önce
item["Quantity"] > 2 and item["Success"]ifadesi değerlendirilir. Bu ifade yalnızca kabloların yer aldığı işlem için truthy bir değer döndürür. Kalan öğeler için falsy olarak değerlendirilir.and ifadesinden gelen değer daha sonra
oroperatörüyle kullanılır.orifadesi,andifadesi için truthy döndüren herhangi bir öğe—bu yalnızca kabloların yer aldığı işlemdi—ve fiyatı 100 $ üzerindeki öğeler için truthy bir değer döndürür. Eşik değerin üzerindeki iki ürün vardır: kahve makinesi ve kulaklık.Python: parantezler ve mantıksal operatörler
Peki, fiyatı 100 $ üzerindeki ya da miktarı ikiden fazla olan işlemleri istiyor, ancak ayrıca işlemin başarılı olmasını da garanti etmek istiyorsak? Bu durumda, önce değerlendirilecek şekilde
orifadesininand'den daha yüksek önceliğe sahip olmasını istiyoruz. Bunuorifadesini parantez içine alarak sağlayabiliriz:Ek parantezler
orifadesine öncelik verir. Kahve makinesi işlemi artık dahil edilmez; çünkü ikinciandoperandı için falsy olarak değerlendirilir.Python:
not,andveor'dan daha yüksek önceliğe sahiptirnotoperatörü,andveor'dan daha yüksek önceliğe sahiptir. Bu nedenle,not, diğer iki mantıksal operatörden önce değerlendirilir.notveand'i içeren aşağıdaki if deyimini düşünelim:notönce değerlendirildiğinden, bu ifade önceitem["Success"]üzerine not operatörünü uygular.notifadesinden gelen değer daha sonra and ifadesinde ilk operand olarak kullanılır. Yalnızca kahve makinesi kaydı bu koşulu sağlar—başarısız olan ve fiyatı 100 $ üzerindeki tek işlemdir.Ancak, parantez kullanarak
andoperatörüne öncelik verebiliriz:Bu durumda önce
andifadesi değerlendirilir. 100 $ üzerindeki başarılı tek işlem olduğu için yalnızca kulaklık kaydıTrueolarak değerlendirilir. Ancak parantez içindeki ifadenin önüne birnotoperatörü ekliyoruz. Bu nedenle kod, kalan üç işlemi çıktılar.Genel olarak, bir ifade çok fazla operatör içerdiği için fazla karmaşık hâle geliyorsa, okunabilirliği artırmak için onu bölmek en iyisidir.
Sonuç
and,orvenotPython mantıksal operatörleri, programlama ve veri biliminin geniş bir alanında yoğun biçimde kullanılır. Bu operatörler, mantık ve matematikte yaygın olarak kullanılan AND, OR ve NOT Boolean mantıksal operatörlerinin davranışını yineler.Ancak Python operatörleri yalnızca Boolean değerleri değil, herhangi bir nesneyi kabul edebilir.
andveoroperatörleri kısa devre değerlendirmesi kullanır ve çıktı olarak operandlardan birini döndürür.Python mantıksal operatörleri; verileri filtrelemek, veri kümelerinde özellikleri belirlemek ve bir programın akışını kontrol etmek için karmaşık kurallar oluşturmak adına temel araçlardır. Bunun hakkında daha fazla bilgi edinmek isterseniz, dokuz dersten oluşan şu Data Analyst With Python kariyer yoluna göz atın.