• Sonuç bulunamadı

Bool De ˘ gerleri ve bool() Fonksiyonu

Genel Tekrar

9.6 Bool De ˘ gerleri ve bool() Fonksiyonu

Söyle bir bölme i¸slemi yaptı˘gımızı dü¸sünelim:

>>> 10 / 2

5.0

Gördü˘günüz gibi burada bir “ondalık sayı” elde ediyoruz. E˘ger elde etti˘gimiz sayının ondalık de˘gil de tamsayı olmasını istersek “//” i¸slecinden yararlanmamız gerekti˘gini biliyoruz:

>>> 10 // 2

5

Bir de ¸söyle bir i¸slem yaptı˘gımızı dü¸sünelim:

>>> 10 % 2

0

Burada da 10 sayısının 2’ye bölümünden kalan sayıyı buluyoruz. Demek ki 10 sayısı 2’ye bölündü˘günde kalan “0” oluyormu¸s. Burada “%” i¸slecinin ne i¸se yaradı˘gını “sayılar” konusunu i¸slerken ö˘grenmi¸stik...

˙I¸ste divmod() fonksiyonu yukarıda bahsetti˘gimiz bu iki i¸slemi birle¸stiriyor. Hemen bir örnekle bunu somutla¸stıralım:

>>> divmod(10, 2)

(5, 0)

Gördü˘günüz gibidivmod() fonksiyonu aynı anda noktasız bölme i¸slemi yapıyor ve bölme i¸ sle-minden kalan sayıyı gösteriyor...

sum()

¸

Simdi görece˘gimizsum() adlı fonksiyon oldukça yararlı bir araçtır. Bu fonksiyon bir sayı dizisini alıp bu dizinin toplamını verir bize. Örne˘gin:

>>> liste = [34, 43, 32, 23, 23232, 32]

>>> sum(liste)

23396

Bu fonksiyonun yalnızca sayılarla kullanılabilece˘gini aklımızdan çıkarmıyoruz...

sum() fonksiyonu ayrıca ikinci bir parametre daha alabilir:

>>> sum(liste, 2)

23398

sum() fonksiyonu, listenin elemanlarını topladıktan sonra, elde edilen toplam de˘gere ikinci parametreyi de ekliyor...

9.6 Bool De ˘ gerleri ve bool() Fonksiyonu

Daha önceki derslerimizde, üzerinde fazla durmamı¸s olsak da aslında Bool de˘gerlerini kullan-mı¸stık. “True” ve “False” olarak ifade edilen de˘gerlere Bool de˘gerleri adı verilir (George Boole

adlı ˙Ingiliz matematikçi ve filozofun adından). “True” de˘geri sayısal olarak “1” ile gösterilirken,

“False” de˘geri “0” ile gösterilir. Türkçe olarak söylemek gerekirse, “True” de˘gerinin kar¸sılı˘gı

“Do˘gru”, “False” de˘gerinin kar¸sılı˘gı ise “Yanlı¸s”tır... Biz bu de˘gerleri mesela kümeler konusunu i¸slerken de görmü¸stük:

>>> a = set([1, 2, 3])

>>> b = set([1, 3, 4, 5])

>>> a.isdisjoint(b)

False

Burada a ve b ayrık kümeler olmadıkları için “Yanlı¸s” anlamına gelen “False” de˘gerini alıyoruz.

Bool de˘gerleri temel olarak bir nesnenin do˘gruluk de˘gerini sorgulamak için kullanılır. Yani bir

¸

seyin do˘gru olup olmadı˘gını anlamak için kullanıyoruz bu Bool de˘gerlerini... Örne˘gin:

>>> a = 23

>>> if a == 23:

... print("a’nın de˘geri 23’tür")

Burada aslında bir do˘gruluk de˘geri sorgulaması yapıyoruz (“E˘ger a 23’e e¸sitse...”). Gerçi bu-rada kar¸sıla¸stırma i¸slemini yapan asıl ö˘ge “==” i¸slecidir, ama aslında bu yapı içinde temel olarak Bool kavramından yararlanılıyor. Bunu etkile¸simli kabukta test edebiliriz:

>>> a = 23

>>> a == 23

True

>>> a == 4

False

Burada oldu˘gu gibi Bool kavramından kar¸sıla¸stırma i¸slemlerinde yararlanmanın yanısıra, bir

¸

seyin herhangi bir de˘gere sahip olup olmadı˘gını denetlemek için de Bool de˘gerlerinden fay-dalanabiliriz. Örne˘gin:

>>> a = 23

>>> if a:

... print("Evet, a’nın bir de˘geri var!..") ...

’Evet, a’nın bir de˘geri var!..’

Bir de ¸su örne˘ge bakalım:

>>> a = ""

>>> if a:

... print("Evet, a’nın bir de˘geri var!..") ... else:

... print("Hayır, a’nın herhangi bir de˘geri yok!") ...

’Hayır, a’nın herhangi bir de˘geri yok!"

Burada kullandı˘gımız “if a:” ifadesi, “E˘ger a do˘gru ise...” anlamına geliyor. Yani burada “E˘ger a’nın Bool de˘geri True ise...” demi¸s oluyoruz. Bu durumu daha açık bir ¸sekilde göstermek için

Python’daki bool() adlı fonksiyondan yararlanabiliriz. Bu fonksiyon, bize herhangi bir ¸seyin de˘gerinin “True” mi yoksa “False” mi oldu˘gunu söyleyecektir:

>>> a = ""

>>> bool(a)

False

Bir de ¸suna bakalım:

>>> a = "karakter dizisi"

>>> bool(a)

True

Dolayısıyla yukarıdakiif deyimini ¸söyle de yazabiliriz:

>>> a = ""

>>> if bool(a):

... print("Evet, a’nın bir de˘geri var!..") ... else:

... print("Hayır, a’nın herhangi bir de˘geri yok!")

a = “” ifadesinin “False” de˘gerini vermesi bize Python’daki Bool de˘gerleri hakkında önemli bir bilgi veriyor. Python’da bazı ¸seyler her zaman “False” de˘geri verir. Örne˘gin bütün bo¸s veritipleri “False” de˘gerine sahiptir. Örne˘gin:

>>> liste = []

>>> bool(liste)

False

>>> sozluk = {}

>>> bool(sozluk)

False

>>> demet = ()

>>> bool(demet)

False

>>> kume = set()

>>> bool(kume)

False

Yukarıdaki veritiplerinin “True” de˘geri verebilmesi için en az bir ö˘geye sahip olmaları gerekir...

Daha önce de dedi˘gimiz gibi, sayısal olarak “True”nin de˘geri 1; “False”nin de˘geri ise 0’dır. Bu durumu ¸su kodlarla daha net bir ¸sekilde görebiliriz:

>>> True + 1 2

Burada “True”nin de˘geri 1 oldu˘gu için, “True + 1” ifadesi “2” sonucunu veriyor. Bir de ¸suna bakalım:

>>> False + 1

1

Burada ise “False”nin de˘geri 0 oldu˘gu için, “False + 1” i¸sleminin sonucu 1 oluyor...

Bu bilgiye göre, de˘geri 0 olan bir de˘gi¸sken False; de˘geri 1 olan bir de˘gi¸sken ise True olacaktır:

>>> a = 0

>>> bool(a)

False

>>> b = 1

>>> bool(b)

True

Ancak bu durumun sadece de˘gi¸skenler için geçerli oldu˘gunu unutmuyoruz. Liste, sözlük, demet, vb. veri tiplerinde durum biraz farklıdır:

>>> liste = [0]

>>> bool(liste)

True

Bunun dı¸sında özel olarak “None” de˘geri de her zaman “False”dir:

>>> a = None

>>> bool(a)

False

Bo¸s veritiplerinin False, dolu veritiplerinin True de˘geri vermesinden yola çıkarak ¸söyle bir uygu-lama yazabiliriz:

liste = []

print("""

Lütfen bir sayı girin. Her veri giri¸sinden sonra Enter tu¸suna basın. ˙I¸slemi bitirip programdan

çıkmak için ise yine Enter tu¸suna basın.""")

while True:

veri = input("Sayı: ") if veri:

try:

sayı = int(veri) liste.append(sayı)

except ValueError:

continue

else:

toplam = sum(liste)

print("girdi˘giniz sayıların toplamı: ", toplam) print("tekrar görü¸smek üzere!")

break

¸

Simdi bu kodları satır satır inceleyelim...

Öncelikle “liste = []” satırı yardımıyla bo¸s bir liste olu¸sturuyoruz. Kullanıcıdan alaca˘gımız veri-leri bu liste içinde toplayaca˘gız.

Ardından birprint() fonksiyonu içinde programımızın ne i¸s yapaca˘gını, kullanıcıdan ne bek-ledi˘gimizi anlatan bir karakter dizisi olu¸sturuyoruz. Buna göre, kullanıcı ekrana bir sayı girecek ve her veri giri¸sinden sonra Enter tu¸suna basacak. Ayrıca i¸slemin sonucunu alıp programdan çıkmak için de yine Enter tu¸suna basması gerekecek...

Daha sonra bir while döngüsü olu¸sturuyoruz. Burada kullandı˘gımız “while True:” ifadesine dikkat edin. Bu ifade, bir kod dizisini sürekli bir döngüye sokmak için kullanabilece˘gimiz stan-dart bir yoldur. Türkçe olarak söylemek gerekirse, “while True:” ifadesi “Do˘gru oldu˘gu müdde-tçe...” anlamına gelir. Bu sayede programımıza ¸su komutu vermi¸s oluyoruz:

“Do˘gru oldu˘gu müddetçe a¸sa˘gıdaki komutları çalı¸stırmaya devam et...”

Peki ne do˘gru oldu˘gu müddetçe? Neyin do˘gru oldu˘gunu açıkça belirtmedi˘gimiz için Python burada “her ¸seyi do˘gru” kabul ediyor... Yani bir nevi, “aksi belirtilmedi˘gi sürece a¸sa˘gıdaki komutları çalı¸stırmaya devam et!” emrini yerine getiriyor.

Sonraki satırda “veri = input(“Sayı: ”)” kodu ile kullanıcıdan veri alma i¸slemini ba¸ slatıy-oruz. Burada henüz kullanıcıdan aldı˘gımız veriyi int() fonksiyonu yardımıyla tamsayıya çe-virmedi˘gimize dikkat edin. E˘ger daha bu a¸samada dönü¸stürme i¸slemini yaparsak, daha sonra kullanıcının programdan çıkmak için kullanaca˘gı Enter tu¸sunu yakalayamayız. Çünkü böyle bir durumda kullanıcı Enter tu¸suna basarsa programımız hata verecektir.

Bundan sonraki adımda “if veri:” satırını yazıyoruz. Bunun, “e˘ger veri adlı karakter dizisi True de˘gerine sahipse...” anlamına geldi˘gini biliyoruz. Zira bildi˘giniz gibi, e˘ger veri adlı karakter dizisi hiçbir ¸sey içermezse, yani bo¸ssa, sahip oldu˘gu Bool de˘geri “False” olacaktır. Yani e˘ger kullanıcımız hiçbir sayı girmeden Enter tu¸suna basarsa, veri adlı karakter dizisinin içeri˘gi bo¸s olaca˘gı için bu karakter dizisi “False” de˘gerine sahip olacaktır. Dolayısıyla e˘ger kullanıcımız bir sayı girip Enter tu¸suna basarsa, veri adlı karakter dizisinin Bool de˘geri True olaca˘gı için

“if veri:” blo˘gu içindeki kodlar i¸sletilecektir. Yok e˘ger kullanıcımız herhangi bir sayı girmeden Enter tu¸suna basarsa a¸sa˘gıdaki “else:” blo˘gu içindeki kodlar çalı¸stırılacaktır...

“if veri:” kodunu yazdıktan sonra bir try... except... blo˘gu olu¸sturuyoruz. Sayıya dönü¸stürme i¸slemini bu blok içinde gerçekle¸stirece˘giz. “sayı = int(veri)” satırı yardımıyla, kullanıcıdan aldı˘gımız karakter dizisini sayıya çeviriyoruz. Hemen ardından gelen

“liste.append(sayı)” satırı ise, kullanıcıdan alıp tamsayıya çevirdi˘gimiz veriyi, en ba¸sta olu¸ s-turdu˘gumuz listeye eklememizi sa˘glıyor.

Sonraki satırda iseexcept... blo˘gumuzu yazıyoruz. Bir öncekitry... blo˘gu içine yazdı˘gımız int() fonksiyonunun, kullanıcının sayı yerine harf girmesi durumunda “ValueError” hatası verece˘gini bildi˘gimiz için bu blok içinde bu hata tipini yakalıyoruz. E˘ger kullanıcı sayı yerine harf girer ve ValueError hatası alınmasına yol açarsa, continue ifadesi yardımıyla döngünün en ba¸sına geri gidiyoruz.

Sıra geldi else: blo˘gumuzu yazmaya... Kodlarımızın ba¸sında “if veri:” ¸seklinde bir ¸sey yazmı¸stık. Bu kod, kullanıcının ekrana bir veri girip girmedi˘gini denetliyordu. ˙I¸ste kullanıcının

herhangi bir veri girmedi˘gi durumlar için buelse: blo˘gunu yazıyoruz. E˘ger kullanıcı hiçbir veri girmeden “Enter” tu¸suna basarsa bu blok içindeki kodlar i¸sletilecektir.

else: blo˘gu içinde yaptı˘gımız ilk i¸s, listeye ekledi˘gimiz sayıların hepsini toplamak olacak...

Bunu daha önce ö˘grendi˘gimiz sum() fonksiyonu yardımıyla yapıyoruz. Ardından da print() fonksiyonunu kullanarak bu toplam de˘geri kullanıcıya gösteriyoruz ve kendisine veda ettikten sonrabreak ifadesi yardımıyla da programdan çıkıyoruz.