Seçim yapma, mantık işlemleri, karşılaştırmalar

En basit programlarda bile sık sık “şu şart doğruysa şöyle yap, yoksa yapma”, veya “doğruysa şöyle yap, yanlışsa yapma” şeklinde düzenlemelere ihtiyaç duyarız. Birçok dil gibi Python’da da bu yapı “if-else” komutlarıyla sağlanır.

if komutu

Karar yapılarının en basit hali, bir şartın doğru olması halinde belli bir işlem yapmaktır. IDLE’da File menüsünden New Window seçin. Açılan yeni editör penceresinde aşağıdaki programı yazın.

hedef = 42
tahmin = input("Tahmininiz: ")
if tahmin == hedef:
    print "Doğru!"

Dosyaya istediğiniz herhangi bir isim (meselâ deneme.py) vererek kaydedin (File|Save). F5’e basarak çalıştırın. Program çalışınca bir sayı girmenizi bekleyecek. Sayı hedef değerine (42) eşitse ekrana “Doğru!” yazısını basacak, değilse birşey yapmayacak.

if‘den sonra tahminin hedefe eşit olup olmadığını söyleyen bir mantık ifadesi var. Bunun değeri ya doğru (True) ya da yanlış (False) olacak. Eşitlik şartı için “==” (iki tane =)  kullanıldığına dikkat edin.

>>> 1 == 1
True
>>> 1 == 2
False
>>> 1 = 1
SyntaxError: can't assign to literal

Şarttan sonra, şart doğruysa çalıştırılacak kod parçası (if bloku) gelir. Burada Python’un kendine özgü bir kuralını görüyoruz: Bloktaki her ifade, if başlığına göre belli bir miktar sağa kaydırılmalıdır. Yorumlayıcı hangi komutların if blokuna ait olduğunu bu kaydırma ile ayırt eder.

Meselâ şu iki ayrı programa bakalım:

hedef = 42
tahmin = input("Tahmininiz: ")
if tahmin == hedef:
    print "Doğru!"
    print "Bravo"

Ve:

hedef = 42
tahmin = input("Tahmininiz: ")
if tahmin == hedef:
    print "Doğru!"
print "Bravo"

İkinci programda

print "Bravo"

komutu if blokunun dışında olduğu için, tahmin doğru olsa da olmasa da çalıştırılır.

Blokun ne kadar sağa kaydırılacağı önemli değildir; bir tek boşluk bile yeterlidir. IDLE otomatik olarak dört boşluk genişlikte bir sıçrama yapar. Sonraki satırlar aynı kaydırma seviyesinde başlayacağı için bloku bitirmek (sola geri kaydırma yapmak) için Backspace tuşuna basmalısınız.

Alt blokların kaydırma ile belirtilmesi Python’un çok eleştirilen bir özelliğidir. Pythoncular buna, diğer dillerde de alt bloklarda kaydırmanın okumayı kolaylaştırma açısından pratikte kabul edilen, hatta mecbur tutulan bir uygulama olduğunu söyleyerek cevap verirler.

if-else komutu

Programımızın bize tahminimizin yanlış olduğunu da söylemesini istersek, else komutunu kullanırız:

hedef = 42
x = input("Tahmininiz: ")
if x == hedef:
    print "Doğru!"
else:
    print "Yanlış"

else ifadesinden sonra herhangi bir şart gelmez, çünkü else bloku zaten if şartı yanlışsa çalıştırılır. else kelimesinin bağlı olduğu if ile aynı kaydırma seviyesinde olduğuna dikkat edin. print “Doğru!” satırından sonra silme (backspace) tuşuna basmalısınız.

Her else bir if‘e bağlı olmalıdır, ama tersi doğru değildir, her if‘e bir else gerekmez.

if-elif-else komutu

if kullanımının en genel hali. elif kelimesi else if‘in kısaltmasıdır.

x = input("Kaç tane? ")
if x>2000:
    print "Binlerce"
elif x>200:
    print "Yüzlerce"
elif x>10:
    print "Çok"
elif x>0:
    print "Birkaç"
else:
    print "Yok"

Aynı programı elif kullanmadan ancak şöyle yazarız:

x = input("Kaç tane? ")
if x>2000:
    print "Binlerce"
else:
    if x>200:
        print "Yüzlerce"
    else:
        if x>10:
            print "Çok"
        else:
            if x>0:
                print "Birkaç"
            else:
                print "Yok"

Görüldüğü gibi elif kullanmak programı sadeleştiriyor.

Karşılaştırmalar

if’den sonra, mantıksal olarak doğru veya yanlış sayılacak ifadeler gelmelidir. Eşitlikten yukarıda bahsettik. Ayrıca > (büyük), < (küçük), >= (büyük veya eşit), <= (küçük veya eşit) ve != (eşit değil) işlemleri kullanılabilir.

>>> 2 > 3, 2 >= 3, 2 < 3, 2 <= 3, 2 != 3
(False, False, True, True, True)

Diğer veri yapıları da karşılaştırmalarda kullanılabilirler. Eşitsizliklerin değerlendirilmesinde alfabetik sıra kullanılır.

>>> "hello" == "Hello", "hello" > "Hello", "hello" < "jello"
(False, True, True)
>>> [1,2,3] < [1,20,3]
True
>>> [1,2,3] < [11,2,3]
True

Daha fazla bilgi için Python dili referansına bakabilirsiniz.

Bir veritipi içinde belli bir element veya alt grup bulunup bulunmadığını in kelimesiyle test edebilirsiniz. Şartı ters çevirmek için not in kullanılır.

>>> L = [12,3,4,[5,6]]
>>> 3 in L
True
>>> [3,4] in L
False
>>> [5,6] in L
True
>>> [5,6] not in L
False
>>> s = "merhaba"
>>> "a" in s
True
>>> "erh" in s
True
>>> d = {"abc": 54, (1,2): -45.1}
>>> "abc" in d
True
>>> 54 in d
False
>>> (1,2) in d
True

Doğru ve yanlış

True ve False, aslında 1 ve 0 sayılarına verilen yeni isimlerdir. Bunların yanı sıra,

[], {}, "", None, 0, 0.0, False

ifadelerinin her biri mantıksal yanlış anlamı taşır. Sıfırdan farklı her sayı ve boş olmayan bir liste/çokuz/dize/sözlük if yapılarında doğru olarak iş görürler.

>>> L=[]
>>> s="abc"
>>> if L:
    print "Liste dolu"
else:
    print "Liste boş."

Liste boş.
>>> if s:
    print s
else:
    print "Boş"

abc

Mantıksal işlemler

Birden fazla şartı Boole işlemleri (and, or, not) ile biraraya getirerek, daha karmaşık şartlar oluşturmak mümkün.

X and Y : Hem X hem Y doğruysa doğru; X ve Y‘den en az biri yanlışsa yanlış.

X or Y : X ve Y‘den en az biri doğruysa doğru, hem X hem Y yanlışsa yanlış.

not X : X‘in doğruluk değerinin tersi.

>>> 1 < 2 and 3==3
True
>>> 1 < 2 and 3==4
False
>>> 1 < 2 or 3==4
True
>>> 1 > 2 or 3==4
False
>>> not 1>2
True
>>> not 3==3
False

İkiden fazla bileşen de kullanılabilir. Öncelik sırasında not işlemi, sonra and işlemi, sonra da or işlemi yapılır. Aynı işlem yapılıyorsa soldan sağa çifter çifter alınır.

>>> 1 == 2 or 3 > 4 or 5 < 8
True
>>> 1 != 2 and not 3 > 4 and 5 < 8
True
>>> 1 != 2 and 3 <= 4 or 5 > 10 and 7 > 8
True

“Kısa devre” işlemler

Mantıksal işlemlerin ilginç bir yan etkisi var. Mantıksal or işleminde, işlenen değerlerden sadece birisinin doğru olması işlem sonucunun doğru olması için yeterli olduğundan, Python X or Y işlemini yaparken X‘in doğru olduğunu görürse Y‘yi hiç işlemez, ve işlem sonucu olarak X‘in değerini geri verir. Buna kısa devre hesaplama adı verilir. Eğer X doğru değilse, Y ne olursa olsun, Y‘yi verir.

>>> "abc" or 3
'abc'
>>> 3 or 0
3
>>> 0 or 3
3
>>> [] or 3
3
>>> [] or {}
{}

Benzer bir durum X and Y işlemi için de geçerli. Eğer X mantıksal olarak yanlışsa, Y ne olursa olsun bütün ifade yanlış olur ve X değeri geri verilir. Ama X doğruysa, işlemin doğruluk değeri Y‘ye bağlıdır, ve Y değeri geri verilir.

>>> 2 and 3
3
>>> 3 and 2
2
>>> "abc" and 0
0
>>> [] and False
[]

Bu özellik çeşitli “hack”ler için kullanılabilir. Sözgelişi

X = A or B or C or None

ifadesi, X‘in, A, B, C arasında boş olmayan ilk nesneye atanmasını, veya None olmasını sağlar. Aynı şeyi if-elif-else kullanarak yapmak daha uzun bir kod gerektirir.

if A:
    X = A
elif B:
    X = B
elif C:
    X = C
else:
    X = None

Üçlü if-else ifadesi

Birçok durumda, bir değişkene, bir şartın doğru veya yanlış olmasına göre farklı değerler atarız. Sözgelişi, x mantık ifadesinin doğru olması halinde a‘ya y değeri verelim, aksi takdirde z verelim.

if x:
    a = y
else:
    a = z

Üçlü if-else ifadesiyle aynısını daha kısa olarak şöyle yazabiliriz:

a = y if x else z

Örnek olarak, m‘ye x‘in mutlak değerini atayalım.

m = x if x>0 else -x

En baştaki örneği de şöyle yazabiliriz.

hedef = 42
x = input("Tahmininiz: ")
print "Doğru!" if x == hedef else "Yanlış"

Bir if-elif-else blokunu da üçlü if-else ifadesi olarak yazabiliriz. Sözgelişi

if rating > 100:
    sinif = "A"
elif rating > 50:
    sinif = "B"
else:
    sinif = "C"

yerine

sinif = "A" if rating > 100 else "B" if rating > 50 else "C"

yazılabilir. Ama aşırıya kaçarsa programın okunması zorlaşır.

Seçim yapma, mantık işlemleri, karşılaştırmalar” üzerine bir yorum

  1. Geri bildirim: Liste kurma | PythonBilim

Yorum bırakın