Bazı Önemli Ayrıntılar
6.2 Bool De ˘ gerler
˙Ingilizce’de, anlamını bütün programcıların çok iyi bilmesi gereken “true” ve “false” diye iki kelime vardır. “True” kelimesinin anlamı “do˘gru”, “False” kelimesinin anlamı ise “yanlı¸s”tır.
Bilgisayar mantı˘gında her ¸sey ya do˘grudur, ya da yanlı¸s... Dolayısıyla herhangi bir ¸sey bilgisayar açısından yaTrue ya da False de˘gere sahiptir.
Hatırlarsanız yukarıda “==” i¸slecini incelerken, bu i¸slecin iki de˘ger arasında kar¸sıla¸stırma yaptı˘gını söylemi¸stik. Bunu söylerken de ¸söyle bir örnek vermi¸stik:
>>> sayi == 3456
True
Bu örnek bizeTrue çıktısı veriyor. Dedi˘gimiz gibi, ˙Ingilizce’de “true” do˘gru demektir.
Dolayısıyla yukarıdaki çıktıya göresayi adlı de˘gi¸skenin de˘geri gerçekten de 3456.
Bir de ¸su örneklere bakalım:
>>> a = 3
>>> a == 3
True
>>> a == 4
False
Burada önceliklea adlı bir de˘gi¸sken tanımladık. Bu de˘gi¸skenin de˘geri 3. Bir sonraki satırdaa de˘gi¸skeninin de˘gerini sorguluyoruz. Burada sordu˘gumuz soru ¸su: “a de˘gi¸skeninin de˘geri 3 mü?”. a de˘gi¸skeninin de˘geri 3 oldu˘gu için buradaTrue yani “do˘gru” çıktısını aldık. Bir sonraki satırda isea == 4 gibi bir ifade görüyoruz. Bu da ¸su anlama geliyor: “a de˘gi¸skeninin de˘geri 4 mü?”. a de˘gi¸skeninin de˘geri 4 olmadı˘gı için bu kezFalse, yani “yanlı¸s” çıktısı alıyoruz.
Dedi˘gimiz gibi, bilgisayar dilinde istisnasız her ¸sey yaTrue [do˘gru] ya daFalse [yanlı¸s]’tur.
˙I¸ste bu iki de˘gere Bool De˘gerler adı verilir ve bu sistem bilgisayarın temelini olu¸sturur.
¸
Simdi biraz daha ayrıntıya girelim. Yukarıdaa de˘gi¸skeninin de˘gerinin ba¸ska bir de˘gere e¸sit olup olmadı˘gını sorguladık. Yani, “a 3 mü?”, “a 4 mü?” gibi sorular sorduk ve buna uygun cevaplar aldık. Bunun yanısıra, ba¸slıba¸sınaa‘nın kendisini de do˘gruluk ve yanlı¸slık açısından sorgulayabiliriz. Mesela ¸söyle sorular sorabiliriz: “a do˘gru mu?” veya “a yanlı¸s mı?”.
Python’da böyle bir soru sorabilmek için bool() adlı bir fonksiyondan yararlanaca˘gız:
>>> a = 3
>>> bool(a)
True
Python’da e˘ger herhangi bir ¸sey, herhangi bir de˘gere sahipse o ¸seyTrue, yani do˘grudur. Ama e˘ger o ¸sey hiç bir de˘gere sahip de˘gilse,False, yani yanlı¸stır. Biraz kafa karı¸stırıcı gelmi¸s olabilir bu tanım. Örnekler durumu daha net anlatacaktır:
>>> a = ""
>>> bool(a)
False
>>> a = "elma"
>>> bool(a)
True
>>> a = " "
>>> bool(a)
True
˙Ilk örnekte a bo¸s bir karakter dizisidir. Yani burada a de˘gi¸skeni hiç bir de˘gere sahip de˘gil.
Dolayısıyla bu de˘gi¸skenFalse‘tur. ˙Ikinci örnekte ise a de˘gi¸skenin “elma” diye bir de˘geri var.
Bu yüzden bu de˘gi¸skenTrue‘dur. Üçüncü örnek sizi biraz ¸sa¸sırtmı¸s olabilir. Ama hiç
¸
sa¸sırtmasın. Çünkü buradaa de˘gersiz de˘gil. Bu de˘gi¸skenin bir de˘geri var. O da bo¸sluk
karakteri! Yani buradaa, bir adet bo¸sluk karakteri barındıran bir karakter dizisidir. Unutmayın,
bo¸s bir karakter dizisi ile bo¸sluk karakteri içeren bir karakter dizisi birbiriyle aynı ¸sey de˘gildir.
Dilerseniz bu durumu kendi gözlerimizle görelim:
>>> a = ""
>>> b = " "
>>> a == b
False
Gördü˘günüz gibi,a ile b birbirine e¸sit de˘gil. Çünküa bo¸s bir karakter dizisi iken,b bir adet bo¸sluk karakterinden olu¸san bir karakter dizisidir... Bu ayrımı asla gözden kaçırmayın.
Dilerseniz bununla ilgili küçük bir örnek verelim:
#!/usr/bin/env python
# coding: utf-8 -*-soru = raw_input("Adınız: ") if bool(soru) == True:
print "Te¸sekkürler"
else:
print "Bu soruyu bo¸s geçemezsiniz!"
Bu örnekte e˘ger kullanıcı soruya herhangi bir cevap verirse ekrana Te¸sekkürler çıktısı verilir.
Ama e˘ger kullanıcı soruyu cevaplamadanENTER tu¸suna basarsa o zaman Bu soruyu bo¸s geçemezsinizçıktısı alır.
Gördü˘günüz gibi burada bool() fonksiyonunu kullandık. Buradakiif bool(soru) == True:
ifadesi ¸su anlama gelir: “E˘ger soru de˘gi¸skeninin bool de˘geri True ise...“
Yukarıdaki kodları Python’da çok daha kolay yazabiliriz aslında. Zaten Python programcıları yukarıdaki gibi bir ¸sey yazacakları zaman ba¸ska bir yol tutmayı tercih ederler. Görelim:
#!/usr/bin/env python
# coding: utf-8 -*-soru = raw_input("Adınız: ") if soru:
print "Te¸sekkürler"
else:
print "Bu soruyu bo¸s geçemezsiniz!"
Gördü˘günüz gibi, hiç bool() fonksiyonunu araya sokmadan, sadeceif soru: diyerek
amacımıza ula¸sıyoruz. Bu ifade de “E˘ger soru de˘gi¸skeninin bool de˘geri True ise...” anlamına gelir.
E˘ger yukarıdakinin tersini yapmak isterseniz not i¸slecinden yararlanabilirsiniz (Bu i¸sleci biraz sonra ayrıntılı olarak inceleyece˘giz):
#!/usr/bin/env python
# coding: utf-8 -*-soru = raw_input("Adınız: ") if not soru:
print "Bu soruyu bo¸s geçemezsiniz!"
else:
print "Te¸sekkürler"
Burada ¸söyle demi¸s oluyoruz: “E˘ger soru de˘gi¸skeninin bool de˘geri True de˘gil ise...“ Bir önceki bölümde ¸su i¸sleçleri görmü¸stük:
Aritmetik ˙I¸sleçler
+ Toplama i¸slemi yapar - Çıkarma i¸slemi yapar / Bölme i¸slemi yapar
* Çarpma i¸slemi yapar Kar¸sıla¸stırma ˙I¸sleçleri
== “e¸sittir” anlamına geliyor
!= “e¸sit de˘gildir” anlamına geliyor
> “büyüktür” anlamına geliyor
< “küçüktür” anlamına geliyor
>= “büyük e¸sittir” anlamına geliyor
<= “küçük e¸sittir” anlamına geliyor
¸
Simdi de mantık i¸sleçlerini (logical operators) inceleyece˘giz. Bir önceki bölümde henüz Bool kavramını ö˘grenmemi¸s oldu˘gumuz için mantık i¸sleçlerinden bahsedememi¸stik. Ama artık bu kavramı bildi˘gimize göre rahatlıkla mantık i¸sleçlerini i¸sleyebiliriz.
Mantık ˙I¸sleçleri
and “VE” anlamına geliyor or “VEYA” anlamına geliyor not “DE ˘G˙IL” anlamına geliyor
Bu i¸sleçler, lisede mantık dersi almı¸s olanlara hiç yabancı gelmeyecektir.
Peki ne i¸se yarar bu mantık i¸sleçleri?
˙Isterseniz uzun uzun açıklama yapmak yerine bir örnek verelim:
#!/usr/bin/env python
# coding: utf-8
-*-kullanici_adi = raw_input("Kullanıcı adınız: ") parola = raw_input("Parola: ")
if kullanici_adi == "ahmet" and parola == "ah12345678":
print "Programa ho¸sgeldiniz!"
else:
print "Kullanıcı adınız ya da parolanız yanlı¸s"
Burada “and” i¸slecinin ne i¸se yaradı˘gı apaçık anla¸sılıyor. Yukarıdaki kodlarda, kullanıcının programa kabul edilmesini, hem kullanıcı adının hem de parolanın do˘gru girilmesi ¸sartına ba˘glıyoruz. E˘ger kullanıcı adı ve paroladan herhangi biri yanlı¸ssa kullanıcı programa giri¸s izni elde edemez.
Yukarıdaki kodları bir de ¸söyle yazalım:
#!/usr/bin/env python
# coding: utf-8
-*-kullanici_adi = raw_input("Kullanıcı adınız: ")
parola = raw_input("Parola: ")
if kullanici_adi == "ahmet" or parola == "ah12345678":
print "Programa ho¸sgeldiniz!"
else:
print "Kullanıcı adınız ya da parolanız yanlı¸s"
Burada “and” yerine “or” kullandı˘gımıza dikkat edin. Bu ¸sekilde kullanıcının programa giri¸s yapabilmesi için kullanıcı adı veya paroladan birini do˘gru girmesi yeterli olacaktır.
Dilerseniz etkile¸simli kabukta birkaç ufak örnekle durumu daha net anlamaya çalı¸salım:
>>> True and True
True
Dedi˘gimiz gibi, ikiTrue de˘ger birbirine “and” ile ba˘glanırsa sonuçTrue olacaktır.
>>> True and False
False
E˘ger de˘gerlerden biri bileFalse ise sonuç da False olacaktır.
>>> False and False
False
Elbette her iki de˘gerin deFalse oldu˘gu durumda sonuç daFalse‘tur.
>>> True or False
True
E˘ger iki de˘ger birbirine “or” ile ba˘glanırsa ve e˘ger bu de˘gerlerden sadece biri bileTrue ise sonuç daTrue olacaktır.
>>> False or False
False
“or” ile birbirine ba˘glanmı¸s iki de˘gerin ikisi deFalse ise sonuç da False‘tur.
>>> True or True
True
Elbette her iki de˘ger deTrue ise sonuç da True olacaktır.
Gelelim “not” i¸slecine... Bu i¸sleç “de˘gil” anlamına gelir. Yani bu i¸sleç cümleye olumsuz bir anlam katar. Birkaç örnek verelim:
>>> kullanici_adi = "ahmet"
>>> not kullanici_adi
False
Burada Python’a ¸söyle bir ¸sey söylemi¸s olduk:
“kullanici_adi de˘gi¸skeninin bool de˘geri True de˘gildir“
O da bize ¸su cevabı verdi:
“Hayır, dostum. Yanılıyorsun! Çünkü kullanıcı_adi de˘gi¸skeni bir de˘gere sahip oldu˘gu için True’dur.“
Hatırlarsanız yukarıda ¸söyle bir örnek vermi¸stik:
#!/usr/bin/env python
# coding: utf-8 -*-soru = raw_input("Adınız: ") if not soru:
print "Bu soruyu bo¸s geçemezsiniz!"
else:
print "Te¸sekkürler"
Buradaif not soru ifadesine dikkat edin. Burada Python’a ¸sunu diyoruz:
“E˘ger soru de˘gi¸skeninin bool de˘geri True de˘gil ise...“
Yukarıdaki örnekte e˘ger kullanıcı “Adınız” sorusunu bo¸s geçersesoru de˘gi¸skeninin de˘geri
¸
söyle olacaktır:
soru = ""
Python’da bo¸s karakter dizilerininFalse oldu˘gunu biliyoruz. Dolayısıyla e˘ger kullanıcı soruyu bo¸s geçerseif not soru: satırı i¸sletilecektir...