• Sonuç bulunamadı

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.

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...