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.