Python 3'te Boolean Mantığını Anlamak
Giriş
Boolean veri tipi iki değerden biri olabilir, True (Doğru) veya False (Yanlış). Programlamada Booleans, karşılaştırmalar yapmak ve belirli bir programdaki kontrol akışını belirlemek için kullanılır.
Booleans, bilgisayar bilimlerinde algoritmaları bilgilendiren mantık dalıyla ilişkili doğruluk değerlerini temsil eder. Matematikçi George Boole'un adına ithafen, Boolean kelimesi her zaman büyük harfle başlar. True
ve False
değerleri de özel değerler olduğundan sırasıyla büyük T ve F harfleri ile yazılır.
Bu eğitimde, Python'da Booleans'ın nasıl çalıştığını anlamak için bilmeniz gerekenleri inceleyeceğiz ve karşılaştırma operatörlerini (comparison operators), mantıksal operatörleri (logical operators) ve doğruluk tablolarını (truth tables) keşfedeceğiz.
Karşılaştırma Operatörleri (Comparison Operators)
Programlamada karşılaştırma operatörleri, değerleri karşılaştırmak ve bunları tek bir Boolean değeri olan True veya False'a indirgemek için kullanılır.
Bilgi: Bu eğitimdeki örnek kodları takip etmek için, yerel sisteminizde python3
komutunu çalıştırarak bir Python etkileşimli kabuğu açın. Ardından örnekleri >>>
istemine ekleyerek kopyalayabilir, yapıştırabilir veya düzenleyebilirsiniz.
Aşağıdaki tablo, Boolean karşılaştırma operatörlerini göstermektedir.
Operatör | Anlamı |
---|---|
== |
Eşit mi? |
!= |
Eşit değil mi? |
< |
Küçük mü? |
> |
Büyük mü? |
<= |
Küçük veya eşit mi? |
>= |
Büyük veya eşit mi? |
Bu operatörlerin nasıl çalıştığını anlamak için bir Python programında iki tamsayıyı iki değişkene atayalım:
x = 5
y = 8
Bu örnekte, x
değişkeninin değeri 5 olduğu için, 8 değeri olan y
'den küçüktür.
Bu iki değişkeni ve ilişkili değerlerini kullanarak, yukarıdaki tablodaki operatörleri inceleyelim. Programımızda, Python'a her karşılaştırma operatörünün True veya False olarak değerlendirilip değerlendirilmediğini yazdırmasını isteyeceğiz. Bu çıktıyı bizim ve diğer kullanıcıların daha iyi anlaması için Python'a neyi değerlendirdiğini de gösterecek bir dize (string) yazdırmasını sağlayacağız.
x = 5
y = 8
print("x == y:", x == y)
print("x != y:", x != y)
print("x < y:", x < y)
print("x > y:", x > y)
print("x <= y:", x <= y)
print("x >= y:", x >= y)
Bu programı çalıştırdığımızda, aşağıdaki çıktıyı alacağız.
Çıktı:
x == y: False
x != y: True
x < y: True
x > y: False
x <= y: True
x >= y: False
Yukarıdaki ifadelerde, Python matematiksel mantığa göre şu değerlendirmeleri yapmıştır:
- 5 (x) 8 (y) ile eşit mi? False
- 5, 8'e eşit değil mi? True
- 5, 8'den küçük mü? True
- 5, 8'den büyük mü? False
- 5, 8'den küçük veya eşit mi? True
- 5, 8'den büyük veya eşit değil mi? False
Burada tam sayılar kullansak da, bunları ondalıklı sayılarla (float values) değiştirebiliriz.
Stringler (Dizeler) de Boolean operatörleriyle kullanılabilir. Stringler, ek bir string yöntemi kullanılmadığı sürece büyük-küçük harf duyarlıdır.
Boolean operatörleriyle stringlerin nasıl karşılaştırıldığına dair bir örnek:
Sammy = "Sammy"
sammy = "sammy"
print("Sammy == sammy:", Sammy == sammy)
Yukarıdaki programın çıktısı şu şekilde olacaktır.
Çıktı:
Sammy == sammy: False
Yukarıdaki "Sammy" dizesi "sammy" dizesine eşit değildir, çünkü aynı değillerdir; biri büyük harf S ile başlarken diğeri küçük harf s ile başlar. Ancak, değeri "Sammy" olarak atanan başka bir değişken eklersek, bu durumda eşit olarak değerlendirileceklerdir:
Sammy = "Sammy"
sammy = "sammy"
also_Sammy = "Sammy"
print("Sammy == sammy:", Sammy == sammy)
print("Sammy == also_Sammy:", Sammy == also_Sammy)
Yukarıdaki programı çalıştırdıktan sonra şu çıktıyı alacağız. Bu, dizenin büyük-küçük harf dahil tamamen aynı olduğu sürece, Boolean mantığı açısından eşit olarak değerlendirileceğini gösterir.
Çıktı:
Sammy == sammy: False
Sammy == also_Sammy: True
İki dizeyi karşılaştırmak için diğer karşılaştırma operatörlerini, örneğin >
ve <
, de kullanabilirsiniz. Python, bu dizeleri karakterlerin ASCII değerlerini kullanarak alfabetik olarak karşılaştıracaktır.
Boolean değerleri de karşılaştırma operatörleriyle değerlendirebiliriz:
t = True
f = False
print("t != f:", t != f)
Yukarıdaki program aşağıdaki çıktıyı verecektir.
Çıktı:
t != f: True
Yukarıdaki çıktıda belirtildiği gibi, yazdığımız kod True'nun False'a eşit olmadığını değerlendirmiştir.
=
ve ==
operatörleri arasındaki farka dikkat edin.
x = y # x'i y'ye eşit olarak ayarlar
x == y # x'in y'ye eşit olup olmadığını değerlendirir
İlk operatör, =
atama operatörüdür ve bir değeri başka bir değere atar. İkincisi, ==
bir karşılaştırma operatörüdür ve iki değerin eşit olup olmadığını değerlendirir.
Mantıksal Operatörler (Logical Operators)
Değerleri karşılaştırmak için kullanılan üç mantıksal operatör vardır. Bu operatörler ifadeleri Boolean değerlerine indirger ve True veya False dönerler. Bu operatörler and
, or
, ve not
olup, aşağıdaki tabloda tanımlanmıştır.
Operatör | Anlamı | Örnek |
---|---|---|
and |
Her ikisi de doğruysa True döner | x and y |
or |
En az biri doğruysa True döner | x or y |
not |
Sadece yanlışsa True döner | not x |
Mantıksal operatörler genellikle iki veya daha fazla ifadenin doğru ya da yanlış olup olmadığını değerlendirmek için kullanılır. Örneğin, öğrencinin dersten geçme notuna sahip olup olmadığı ve ders kaydının olup olmadığı değerlendirilebilir. Bu iki durum doğruysa, öğrenci sistemde not alacaktır. Başka bir örnek, bir kullanıcının bir çevrimiçi mağazanın geçerli bir aktif müşterisi olup olmadığını, mağaza kredisine sahip olup olmadığını veya son 6 ayda bir satın alma yapıp yapmadığını belirlemek olabilir.
Mantıksal operatörlerin nasıl çalıştığını anlamak için, üç ifadeyi değerlendirelim:
print((9 > 7) and (2 < 4)) # Her iki orijinal ifade de True (Doğru)
print((8 == 8) or (6 != 6)) # Bir orijinal ifade True (Doğru)
print(not(3 <= 1)) # Orijinal ifade False (Yanlış)
Çıktı:
True
True
True
İlk durumda, print((9 > 7) and (2 < 4))
, hem 9 > 7
hem de 2 < 4
ifadeleri True
(Doğru) olarak değerlendirildiği için and
(ve) operatörü kullanılmıştır.
İkinci durumda, print((8 == 8) or (6 != 6))
, 8 == 8
True
(Doğru) olarak değerlendirilmiştir; bu nedenle or
(veya) operatörü kullanıldığında 6 != 6
'nın False
(Yanlış) olarak değerlendirilmesi fark yaratmaz. Eğer and
(ve) operatörü kullanılsaydı, bu False
(Yanlış) olarak değerlendirilirdi.
Üçüncü durumda, print(not(3 <= 1))
, not
(değil) operatörü 3 <= 1
'in False
(Yanlış) değerini tersine çevirir.
Ondalık sayılar için tamsayıları değiştirip, False (Yanlış) değerlendirmeleri hedefleyelim:
print((-0.2 > 1.4) and (0.8 < 3.1)) # Bir orijinal ifade False (Yanlış)
print((7.5 == 8.9) or (9.2 != 9.2)) # Her iki orijinal ifade de False (Yanlış)
print(not(-5.7 <= 0.3)) # Orijinal ifade True (Doğru)
Yukarıdaki örnekte,
and
en az bir False ifadeye sahip olduğunda False olarak değerlendirir,or
her iki ifadenin de False olarak değerlendirildiğinde False olur,not
iç ifadesi True olduğunda yeni ifade False olarak değerlendirilir.
Yukarıdaki sonuçlar size belirsiz geliyorsa, aşağıda bazı doğruluk tabloları ile size konuyu açıklamaya çalışacağız.
Ayrıca, and
, or
, ve not
kullanarak bileşik ifadeler yazabilirsiniz:
not((-0.2 > 1.4) and ((0.8 < 3.1) or (0.1 == 0.1)))
İlk olarak en içteki ifadeye bakalım: (0.8 < 3.1) or (0.1 == 0.1)
. Bu ifade True
olarak değerlendirilir çünkü her iki matematiksel ifade de True
'dur.
Şimdi, dönen True
değerini bir sonraki iç ifadeyle birleştirebiliriz: (-0.2 > 1.4) and (True)
. Bu örnek False
olarak döner çünkü matematiksel ifade -0.2 > 1.4
False
'tur ve (False) and (True)
False
döner.
Son olarak, dış ifadeye sahibiz: not(False)
, bu True
olarak değerlendirilir, dolayısıyla bu ifadeyi yazdırırsak elde edeceğimiz nihai değer şudur:
Çıktı:
True
Mantıksal operatörler and
, or
, ve not
, ifadeleri değerlendirir ve Boolean (mantıksal) değerler döndürür.
Doğruluk Tabloları
Matematiğin mantık dalı hakkında öğrenilecek çok şey vardır, ancak programlamada algoritmik düşünme yeteneğimizi geliştirmek için bazılarını seçici olarak öğrenebiliriz.
Aşağıda karşılaştırma operatörü ==
, ve her bir mantıksal operatör and
, or
, ve not
için doğruluk tabloları bulunmaktadır. Mantığını kavrayabilmenize rağmen, bunları ezberlemek programlama karar sürecinizi hızlandırabilir.
==
Doğruluk Tablosu
x | == | y | Dönen Değer |
---|---|---|---|
True | == | True | True |
True | == | False | False |
False | == | True | False |
False | == | False | True |
AND
Doğruluk Tablosu
x | and | y | Dönen Değer |
---|---|---|---|
True | and | True | True |
True | and | False | False |
False | and | True | False |
False | and | False | False |
OR
Doğruluk Tablosu
x | or | y | Dönen Değer |
---|---|---|---|
True | or | True | True |
True | or | False | True |
False | or | True | True |
False | or | False | False |
NOT
Doğruluk Tablosu
not | x | Dönen Değer |
---|---|---|
not | True | False |
not | False | True |
Doğruluk tabloları, mantıkta kullanılan yaygın matematiksel tablolardır ve bilgisayar programlamada algoritmalar (talimatlar) oluştururken ezberlemek veya akılda tutmak yararlıdır.
Program Akış Kontrolü İçin Boolean (Mantıksal) Operatörleri Kullanmak
Bir programın akışını ve sonuçlarını akış kontrol ifadeleri biçiminde kontrol etmek için, bir koşul ve ardından bir ifade kullanabiliriz.
Bir koşul True
veya False
değerine indirgenen bir Boolean değeri ile değerlendirilir ve programda bir karar verilmesi gereken bir noktayı temsil eder. Yani, bir koşul bize bir şeyin True
ya da False
olarak değerlendirilip değerlendirilmediğini söyler.
İfade, koşulu izleyen ve programın sonucunu belirleyen kod bloğudur. Yani, bu, “Eğer x True ise, bunu yap.” ifadesindeki yap kısmıdır.
Aşağıdaki kod bloğu, karşılaştırma operatörlerinin Python programının akışını kontrol etmek için koşullu ifadelerle birlikte nasıl çalıştığını gösterir:
if grade >= 65: # Koşul
print("Geçer not") # İfade
else:
print("Kalır not")
Bu program, her bir öğrencinin notunun geçip geçmediğini değerlendirecektir. Bir öğrencinin notu 83 olduğunda, ilk ifade True
olarak değerlendirilir ve Geçer not
yazdırma ifadesi tetiklenir. Bir öğrencinin notu 59 olduğunda ise, ilk ifade False
olarak değerlendirilir, bu nedenle program else
ifadesine bağlı yazdırma ifadesini çalıştırır: Kalır not
.
Python'da her bir nesne True
veya False
olarak değerlendirilebildiğinden, PEP 8 Stil Kılavuzu bir değeri True
veya False
ile karşılaştırmaktan kaçınılmasını önerir çünkü bu daha az okunaklıdır ve sık sık beklenmeyen bir Boolean döndürür. Yani, programlarınızda if sammy == True:
kullanmaktan kaçınmalısınız. Bunun yerine, sammy'yi Boolean döndürecek başka bir Boolean olmayan değerle karşılaştırın.
Boolean operatörleri, program akışı kontrol ifadeleri aracılığıyla bir programın nihai sonucunu belirlemek için kullanılabilecek koşullar sunar.
Sonuç
Bu öğreticide, Boolean türüne ait karşılaştırma ve mantıksal operatörleri, doğruluk tablolarını ve program akışı kontrolü için Boolean kullanmayı ele aldık.
Lisa Tagliaferri tarafından yazılan Understanding Boolean Logic in Python 3 Program makalesinin düzenlenmiş çevirisi.
Daha Fazla Oku:
- Sonraki Makale: Python 3'te Listeleri Anlamak
- Önceki Makale: Sayılarla Çalışmak İçin Yerleşik Python 3 Fonksiyonları